CN100365590C - 在嵌入式系统模拟器上调试应用程序的方法 - Google Patents

在嵌入式系统模拟器上调试应用程序的方法 Download PDF

Info

Publication number
CN100365590C
CN100365590C CNB2005100492986A CN200510049298A CN100365590C CN 100365590 C CN100365590 C CN 100365590C CN B2005100492986 A CNB2005100492986 A CN B2005100492986A CN 200510049298 A CN200510049298 A CN 200510049298A CN 100365590 C CN100365590 C CN 100365590C
Authority
CN
China
Prior art keywords
simulator
debugging
instruction
operating system
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CNB2005100492986A
Other languages
English (en)
Other versions
CN1645339A (zh
Inventor
卜佳俊
陈纯
沈格俊
赵军
柯化成
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CNB2005100492986A priority Critical patent/CN100365590C/zh
Publication of CN1645339A publication Critical patent/CN1645339A/zh
Application granted granted Critical
Publication of CN100365590C publication Critical patent/CN100365590C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了在嵌入式系统模拟器上调试应用程序的方法。本发明的方法通过读取操作系统编译时生成的内核符号文件,得到位于模拟器内存中的应用程序进程控制块信息,从而获得对应用程序的控制能力,实现对运行于模拟器中操作系统之上的应用程序的调试。其优势在于不需要操作系统的网络支持,不需要运行额外的调试器程序,从而避免了嵌入式操作系统上缺乏调试器的问题;同时,本方法不在虚拟器的操作系统上执行额外的程序,提高了模拟器的性能,改善响应速度。

Description

在嵌入式系统模拟器上调试应用程序的方法
技术领域
本发明涉及计算机程序调试技术,特别是在嵌入式系统模拟器上调试应用程序的方法。
背景技术
随着嵌入式设备普及,例如个人数字助手(PDA),手机等,基于便携移动设备的应用大量涌现。而嵌入式设备上的应用程序一般都在与目标平台异构的机器环境下开发,不能在开发环境下调试,且嵌入式设备的开发评估的硬件仿真设备一般都比较昂贵,因此调试成为制约着嵌入式软件开发的重要因素。
计算机系统模拟器技术是在某种架构的计算机中通过模拟目标架构计算机的硬件特征和其指令执行的过程,从而实现在一台计算机上虚拟出多台计算机的技术。流行的计算机系统模拟器例如:Bochs,可以在多种体系结构的机器上模拟多台Intel 80x86体系的计算机,并运行Linux、freebsd等操作系统的Intel80x86版本;armulator,可以在Intel 80x86体系结构的机器上模拟ARM体系的计算机,并运行ucLinux的ARM移植版本等。
利用计算机系统模拟器的特点,在模拟器上进行嵌入式软件的调试成为解决嵌入式系统调试问题的一种解决方案,但是现有的基于模拟器的调试技术通常只能调试运行于嵌入式系统模拟器上的操作系统,而对操作系统之上的应用程序无能为力,这限制了基于模拟器调试技术发挥作用的空间;或者通过在操作系统上额外运行调试器,例如gdb,但如果在该操作系统上无可用的调试器(如ucLinux),则无法使用;或者在操作系统上运行调试器代理,例如gdb server,但要求模拟器支持虚拟的网络连接同时操作系统必须实现TCP/IP等网络协议栈,而这些要求许多嵌入式操作系统不能满足,即时满足,也增加了模拟器执行的程序,影响模拟器性能。
进程是计算机程序执行的基本单位,也是调试的基本单位。关于进程的基本信息都储存在操作系统的进程控制块结构中,包括待调试进程的唯一标识和进程的上下文信息(与CPU相关的状态,包括寄存器,页表基址,段基址等)。因而透过模拟器上的操作系统调试应用软件的关键就在于获得操作系统内存空间中的进程控制块信息。
发明内容
本发明的目的在于提供一种在嵌入式系统模拟器上调试应用程序的方法。
本发明采用的技术方案是:
1)调试器使用者指定待调试应用程序在模拟器上操作系统中的进程标识号;
2)在符号分析加载模块中,对操作系统编译时生成的内核符号表进行扫描分析,得到进程控制块结构实例的内存地址,并遍历所有进程控制块结构实例,根据步骤1)中指定的进程标识号取得待调试应用程序的进程控制块的内存地址;
3)如果操作系统支持虚地址机制,则虚拟内存访问模块实现与模拟器上运行的操作系统同样的地址转换算法,根据2)中获得的内存地址计算出对应的物理地址,如若遇见所对应的内存页不在物理内存中,则需进一步解析进程控制块结构中的内存数据结构来获取其在模拟文件系统或交换文件中所在的块号并将页加载至内存,若上层运行的操作系统不支持虚地址机制,则本步骤可以省去;
4)调试接口模块接受来自程序开发人员的各种调试指令,送至调试代理模块,并将调试代理模块接受指令后产生的调试信息接受并显示;
5)调试代理模块收到4)中调试接口模块传来的调试指令,若调试指令为插入断点,则将目的断点地址对应的指令修改为自行定义格式的断点指令,被覆盖的原指令连同断点位置被保存下来,当虚拟机遇到该断点指令时,则停机等待从调试器发过来的调试指令;若调试指令为现场查询指令或现场修改指令,则根据2)中获得的进程控制块中存储的内存地址对属于进程的内存地址或者由模拟器模拟的寄存器进行相应的操作;若调试指令为继续执行,则将保存的原指令恢复,让虚拟机恢复运行状态;若为显示进程列表指令,则调用符号分析加载模块根据2)所述获取进程列表数据结构在内核中的内存地址,并遍历该结构;若为指定调试进程指令,则在模拟器内部维护一个当前调试进程信息的数据结构。
本发明和技术相比具有的有益的效果是:其优势在于不需要操作系统的网络支持,不需要运行额外的调试器程序,从而避免了嵌入式操作系统上缺乏调试器的问题;同时,本方法不在虚拟器的操作系统上执行额外的程序,提高了模拟器的性能,改善响应速度。
具体实施方式
某ARM模拟器中,实现了对ARMv4版本指令的解释执行,模拟了Atmel公司AT91EV40开发板,在其上能够运行ucLinux版本2.0.0。该版本ucLinux编译时生成内核符号文件为/boot/system.map。待调试的程序名假设为debuggedproc,调试器为debugger,模拟器名为simon,在模拟器中实现了符号分析加载模块、虚拟内存访问模块、调试代理模块。同时在另外独立运行的调试器客户端中包含了调试接口模块,该模块和模拟器的调试代理模块通过套接字进行通讯,通讯格式遵循GDB远程调试协议。
1)调试器debugger通过符号分析加载模块获取的进程列表来确定待调试程序debuggedproc在目标操作系统上的进程ID,假设为1000。此时,调试器可以通过attach 1000指令根据技术方案中1)所述指定待调试的进程ID。
2)符号分析加载模块,对操作系统编译时生成的内核符号表system.map进行扫描分析,得到进程控制块结构数组task对应的内存地址,task数组中的项为进程控制块结构,通过遍历所有进程控制块结构实例,根据技术方案中1)中指定的进程标识号取得待调试应用程序的进程控制块的内存地址。根据操作系统支持虚地址与否,该内存地址可能是虚拟地址,也可能是物理地址;
3)虚拟内存访问模块,如果操作系统支持虚地址机制,则该模块实现与模拟器上运行的操作系统同样的地址转换算法,根据技术方案中1)中获得的虚地址计算出对应的物理地址,如若遇见所对应的内存页不在物理内存中,则需进一步解析进程控制块结构中的内存数据结构来获取其在模拟文件系统或交换文件中所在的块号并将页加载至内存;若上层运行的操作系统不支持虚地址机制,则本步骤可以省去;
4)调试接口模块,该模块接受来自程序开发人员的各种调试指令(如显示进程列表、指定调试进程、查看内存、修改内存、插入断点、查看断点、删除断点、查看寄存器、修改寄存器、单步执行等),依据gdb远程调试协议格式的要求解析出调试指令及其调试参数并送至调试代理模块,并将调试代理模块接受指令后产生的反馈调试信息接受并显示;
5)调试代理模块,该模块收到调试接口传来的调试指令及其调试参数,若调试指令为插入断点,则将目的断点地址对应的指令修改为自行定义格式的断点指令,被覆盖的原指令连同断点位置被保存下来,当虚拟机遇到该指令时,则停机等待其它调试指令;若调试指令为现场查询指令或现场修改类指令,则根据技术方案中2)中获得的进程控制块中存储的内存地址对属于进程的内存地址或者由模拟器模拟的寄存器进行相应的操作;若调试指令为继续执行,则将保存的原指令恢复,让虚拟机恢复运行状态。若为显示进程列表指令,则调用符号分析加载模块根据技术方案中2)所述获取进程列表数据结构在内核中的内存地址,并遍历该结构。若为指定调试进程指令,则在模拟器内部维护一个当前调试进程信息的数据结构。
使用本方法不需要在ucLinux下运行额外的调试程序(例如GDB),也不要求该ucLinux实现TCP/IP协议,极大的减少了模拟器在解析这些程序或协议的指令时所造成的性能损耗。

Claims (1)

1.一种在嵌入式系统模拟器上调试应用程序的方法,其特征在于该方法的步骤如下:
1)调试器使用者指定待调试应用程序在模拟器上操作系统中的进程标识号;
2)在符号分析加载模块中,对操作系统编译时生成的内核符号表进行扫描分析,得到进程控制块结构实例的内存地址,并遍历所有进程控制块结构实例,根据步骤1)中指定的进程标识号取得待调试应用程序的进程控制块的内存地址;
3)如果操作系统支持虚地址机制,则虚拟内存访问模块实现与模拟器上运行的操作系统同样的地址转换算法,根据2)中获得的内存地址计算出对应的物理地址,如若遇见所对应的内存页不在物理内存中,则需进一步解析进程控制块结构中的内存数据结构来获取其在模拟文件系统或交换文件中所在的块号并将页加载至内存,若上层运行的操作系统不支持虚地址机制,则本步骤可以省去;
4)调试接口模块接受来自程序开发人员的各种调试指令,送至调试代理模块,并将调试代理模块接受指令后产生的调试信息接受并显示;
5)调试代理模块收到4)中调试接口模块传来的调试指令,若调试指令为插入断点,则将目的断点地址对应的指令修改为自行定义格式的断点指令,被覆盖的原指令连同断点位置被保存下来,当虚拟机遇到该断点指令时,则停机等待从调试器发过来的调试指令;若调试指令为现场查询指令或现场修改指令,则根据2)中获得的进程控制块中存储的内存地址对属于进程的内存地址或者由模拟器模拟的寄存器进行相应的操作;若调试指令为继续执行,则将保存的原指令恢复,让虚拟机恢复运行状态;若为显示进程列表指令,则调用符号分析加载模块根据2)所述获取进程列表数据结构在内核中的内存地址,并遍历该结构;若为指定调试进程指令,则在模拟器内部维护一个当前调试进程信息的数据结构。
CNB2005100492986A 2005-01-31 2005-01-31 在嵌入式系统模拟器上调试应用程序的方法 Expired - Fee Related CN100365590C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005100492986A CN100365590C (zh) 2005-01-31 2005-01-31 在嵌入式系统模拟器上调试应用程序的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005100492986A CN100365590C (zh) 2005-01-31 2005-01-31 在嵌入式系统模拟器上调试应用程序的方法

Publications (2)

Publication Number Publication Date
CN1645339A CN1645339A (zh) 2005-07-27
CN100365590C true CN100365590C (zh) 2008-01-30

Family

ID=34876565

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005100492986A Expired - Fee Related CN100365590C (zh) 2005-01-31 2005-01-31 在嵌入式系统模拟器上调试应用程序的方法

Country Status (1)

Country Link
CN (1) CN100365590C (zh)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100416513C (zh) * 2005-11-15 2008-09-03 中兴通讯股份有限公司 一种嵌入式软件的编译调试方法
US7802050B2 (en) * 2006-09-29 2010-09-21 Intel Corporation Monitoring a target agent execution pattern on a VT-enabled system
CN101207604B (zh) * 2006-12-20 2012-03-28 联想(北京)有限公司 一种虚拟机系统及其通信处理方法
CN100456260C (zh) * 2006-12-21 2009-01-28 华为技术有限公司 一种用于对解释语言程序进行调试方法及装置
US8239832B2 (en) * 2007-05-25 2012-08-07 Microsoft Corporation In-process debugging using external debugging infrastructure
CN101329638B (zh) 2007-06-18 2011-11-09 国际商业机器公司 程序代码的并行性的分析方法和系统
CN101262366B (zh) * 2008-02-01 2010-10-27 杭州华三通信技术有限公司 目标单板调试方法、系统及分布式设备
US9395983B2 (en) * 2008-08-20 2016-07-19 Freescale Semiconductor, Inc. Debug instruction for execution by a first thread to generate a debug event in a second thread to cause a halting operation
CN101609429B (zh) * 2009-07-22 2011-09-07 大唐微电子技术有限公司 一种调试嵌入式操作系统的方法和装置
CN102063366B (zh) * 2009-11-18 2014-12-31 中兴通讯股份有限公司 调试进程的方法和系统
KR101459868B1 (ko) * 2011-03-15 2014-11-12 현대자동차주식회사 통신 테스트 장치 및 방법
CN102301344B (zh) * 2011-07-06 2013-12-04 华为技术有限公司 一种操作系统内核调试方法和虚拟调试服务模块
CN103064723B (zh) * 2011-10-18 2016-01-20 财团法人工业技术研究院 虚拟机器存储器的鉴识方法与计算机系统
CN103235755A (zh) * 2013-04-16 2013-08-07 合肥联宝信息技术有限公司 一种bios远程网络调试方法
CN104503915B (zh) * 2014-12-31 2018-01-23 北京奇虎科技有限公司 评测垃圾短信拦截工具的系统和方法
CN105843690A (zh) * 2016-03-14 2016-08-10 乐视移动智能信息技术(北京)有限公司 一种进行调试信息传输的方法及移动终端
CN106293880B (zh) * 2016-08-10 2019-12-13 北京奇虎科技有限公司 在Windows系统上运行Android应用程序的方法及装置
CN106445630A (zh) * 2016-08-10 2017-02-22 北京奇虎科技有限公司 Android模拟器及实现Android模拟器的方法
CN107870855A (zh) * 2016-09-27 2018-04-03 北京计算机技术及应用研究所 基于天熠嵌入式操作系统的调试系统
CN110673878B (zh) * 2019-09-11 2023-03-31 上海高性能集成电路设计中心 一种基于指令集模拟器的指令信息查询及执行调试方法
CN110990018B (zh) * 2019-10-29 2023-03-24 北京全路通信信号研究设计院集团有限公司 一种嵌入式系统的编译方法及编译系统
CN112925700B (zh) * 2019-12-06 2024-05-10 西安诺瓦星云科技股份有限公司 程序调试方法、装置及系统和嵌入式设备
CN111025166A (zh) * 2019-12-27 2020-04-17 深圳市新威尔电子有限公司 用于电池检测系统的调试器
CN111209193B (zh) * 2019-12-30 2023-09-22 北京水滴科技集团有限公司 程序的调试方法及装置
CN113535487B (zh) * 2020-04-16 2024-10-15 杭州中天微系统有限公司 测试系统及方法
CN111880863B (zh) * 2020-07-10 2023-10-24 Oppo广东移动通信有限公司 应用程序的运行方法、装置、电子设备及存储介质
CN112799816B (zh) * 2021-02-01 2023-03-31 安徽芯纪元科技有限公司 一种嵌入式操作系统的多任务程序指定任务调试方法
CN114327648B (zh) * 2021-12-16 2024-02-02 北京安天网络安全技术有限公司 一种驱动调试方法、装置、电子设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1286431A (zh) * 1999-11-30 2001-03-07 深圳市中兴通讯股份有限公司 嵌入式软件辅助调试方法
CN1287309A (zh) * 1999-11-04 2001-03-14 深圳市中兴通讯股份有限公司 针对嵌入式系统的通用协议测试方法
JP2001318805A (ja) * 2000-05-08 2001-11-16 Nec Corp 組み込みシステムのテスト方法及びテストシステム
CN1359496A (zh) * 1999-06-30 2002-07-17 英特尔公司 使用基于区域的页表的虚拟存储映射
CN1487415A (zh) * 2002-08-26 2004-04-07 国际商业机器公司 使用基于时间的断点调试计算机程序的方法和系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1359496A (zh) * 1999-06-30 2002-07-17 英特尔公司 使用基于区域的页表的虚拟存储映射
CN1287309A (zh) * 1999-11-04 2001-03-14 深圳市中兴通讯股份有限公司 针对嵌入式系统的通用协议测试方法
CN1286431A (zh) * 1999-11-30 2001-03-07 深圳市中兴通讯股份有限公司 嵌入式软件辅助调试方法
JP2001318805A (ja) * 2000-05-08 2001-11-16 Nec Corp 組み込みシステムのテスト方法及びテストシステム
CN1487415A (zh) * 2002-08-26 2004-04-07 国际商业机器公司 使用基于时间的断点调试计算机程序的方法和系统

Also Published As

Publication number Publication date
CN1645339A (zh) 2005-07-27

Similar Documents

Publication Publication Date Title
CN100365590C (zh) 在嵌入式系统模拟器上调试应用程序的方法
US7174544B2 (en) JAVA compile-on-demand service system for accelerating processing speed of JAVA program in data processing system and method thereof
US7669186B2 (en) Debugging applications at resource constrained virtual machines using dynamically installable lightweight agents
CN105100191A (zh) 一种云编译实现Java应用安装的方法、装置及系统
CN102279765A (zh) 预编译托存托管代码
EP1723561A1 (en) Method, data processing device, computer program product and arrangement for processing electronic data
CN101706750B (zh) 一种基于嵌入式模拟器的测试桩获取方法
CN107577609B (zh) 一种基于主机端动态链接的嵌入式系统动态模块调试系统
CN103176899A (zh) 手机模拟器及在宿主机上模拟手机功能的方法
CN111723002A (zh) 一种代码调试方法、装置、电子设备及存储介质
CN111338925A (zh) 小程序测试方法及装置、系统、电子设备和存储介质
CN101261600A (zh) 一种软件测试装置及测试软件的设计方法
CN102622263A (zh) 机顶盒上基于嵌入式系统虚拟机的实现方法
CN114817028A (zh) 一种基于软件开发平台中多目标交叉调试系统
Kröll et al. Aristoteles–dissecting apple’s baseband interface
CN1929399A (zh) 嵌入式Web网管系统及其交互方法
CN114816672A (zh) 虚拟机的创建方法、装置、电子设备和存储介质
CN102725732A (zh) 提升移动微件Widget应用性能的方法及装置
CN103678099B (zh) 一种实现硬件平台与软件平台通讯的方法以及装置
CN109460280B (zh) 运行程序的方法、终端
CN116166907B (zh) 一种使用WebAssembly和服务页面编译技术开发Web应用的方法及装置
CN111831395A (zh) 一种行为监控分析方法与系统
CN109947407B (zh) 一种数据获取方法及装置
CN111488286A (zh) 一种Android模块独立开发的方法及装置
WO2004088508A2 (en) A method of creating software that is portable across different operating systems

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract

Assignee: Yangzhou Inno Intelligent Technology Co., Ltd.

Assignor: Zhejiang University

Contract record no.: 2010320000554

Denomination of invention: Debugging method for applied programm in simulator of embedded system

Granted publication date: 20080130

License type: Exclusive License

Open date: 20050727

Record date: 20100507

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20080130

Termination date: 20180131