一种在源程序层次实现运算符单步调试的方法

文档序号:6586813阅读:170来源:国知局
专利名称:一种在源程序层次实现运算符单步调试的方法
技术领域
本发明涉及了计算机程序调试技术领域,主要是一种在源程序层次实现运算符单
步调试的方法。
背景技术
源程序调试是用来帮助用户在源程序层次上跟踪程序的执行流程,定位程序故障 的一个常用手段和方法。 目前的源程序调试器,在编译源程序时,记录和存储源程序语句的源程序文件的 源文件名和行号,在源程序层次调试程序时,如果执行调试器的单步命令或通过设置断点 方式,可以从程序的开始运行被调试程序,使执行进程暂停在这个程序的第一行有效代 码中,编辑窗口中的这行源代码的开始处用一个箭头来标记执行到的这一代码行。例如 Microsoft Visual C++调试器就是用一个黄色的箭头来标记当前将要执行的代码行。
如果继续执行调试器的单步命令,调试器执行这个程序当前代码行,然后执行进 程又暂停下来,编辑窗口中的这行源代码开始处的箭头就会移动到下一个代码行。
如果每行代码是一个源程序语句,用户就可以在源程序语句级别对程序的执行流 程进行跟踪,查看执行过程中各个变量的值。 在源程序代码的编写时,一条语句可以包含多个表达式,每个表达式可以是多个 运算符和其操作数的有效组合。 在调试程序时,操作者有时希望能够在源程序层次可视地跟踪表达式中各个运算 符和它的相应操作数求值计算的执行流程,或者在源程序层次可视地跟踪语句中多个表达 式求值计算的执行流程。而目前的源程序调试器在解决这类问题时存在困难。

发明内容
本发明的目的是针对上述现有源程序调试技术缺陷,提供一种在源程序层次实现 运算符单步调试的方法。 实现本发明目的采用的技术方案为在解析或编译源程序时,记录和存储表达式 中运算符和相应操作数在源程序中的位置数据;当用户使用运算符单步调试命令时,调试 器执行以下步骤, 步骤1,当用户使用运算符单步调试命令时,启动执行调试对象程序进程,通过调 试对象程序进程实现以下步骤1. 1和步骤1. 2, 步骤1. l,判断调试器是否执行调试对象程序进程至一个运算符,若是则对于调 试器执行调试对象程序进程所至的运算符,获得已存储的该运算符和相应操作数的位置数 据; 步骤1. 2,根据位置数据把该运算符和相应操作数加上标记,并把加上标记后的运 算符和相应操作数的源程序代码在调试器窗口中显示给用户; 步骤2,在步骤1. 2执行完毕后暂停调试对象程序进程,等待用户要求继续执行运算符单步调试命令; 步骤3,当用户要求继续执行运算符单步调试命令时,执行加上标记后的运算符和 相应操作数的求值计算,计算完成后取消标记;然后继续执行调试对象程序进程,返回至步 骤1. 1循环执行以实现对下一个运算符单步调试,直到步骤1. 1判断出调试器执行调试对 象程序进程至没有运算符时为止。 而且,所述表达式中运算符和相应操作数在源程序中的位置数据,包括这个表达 式所在的源程序的源文件名,运算符和相应操作数在源程序文件窗口中的行号,运算符的 字符串在源程序文件窗口中第一个字符列号和最后一个字符列号,相应操作数的字符串在 源程序文件窗口中第一个字符列号和最后一个字符列号。 而且,所述标记包括给运算符的字符串和操作数的字符串加上背景色亮条的高亮 显示。 而且,所述标记包括给运算符的字符串和操作数的字符串颜色反转显示。 而且,所述标记包括给运算符的字符串和操作数的字符串改变字符的字体颜色的
高亮显示。 而且,所述标记包括给运算符的字符串和操作数的字符串加上下划线。 而且,所述标记包括给运算符的字符串和操作数的字符串加上字符边框。 而且,所述标记包括修改运算符的字符串和操作数的字符串的字符字体、字符字
号或字符字形的高亮显示。 采用本发明,能够在源程序层次给当前将要执行的运算符和操作数加上标记,能 够在源程序层次可视地跟踪表达式中运算符和它的操作数求值计算的执行流程,能够在源 程序层次可视地跟踪语句中多个表达式求值计算的执行流程。本发明支持用户更快速准确 地定位程序故障,实施简便,效果显著。


图1为本发明中在源程序层次的运算符单步调试方法实施例的软件流程图。 图2为表示本发明实施例一中调试对象C语言程序的一部分,一个C语言程序表 达式。 图3为表示本发明实施例一中给C语言程序表达式b*c加上颜色反转显示标记。 图4为表示本发明实施例一中给C语言程序表达式a_b*c加上颜色反转显示标 记。 图5为表示本发明实施例一中给C语言程序表达式d = a_b*c加上颜色反转显示 标记。 图6为表示本发明实施例二中调试对象C语言程序的一部分, 一个for循环语句。 图7为表示本发明实施例二中给C语言程序循环语句的表达式1加上颜色反转显 示标记。 图8为表示本发明实施例二中给C语言程序循环语句的表达式2加上颜色反转显 示标记。 图9为表示本发明实施例二中给C语言程序循环语句的循环体语句加上颜色反转 显示标记。
图10为表示本发明实施例二中给C语言程序循环语句的表达式3加上颜色反转 显示标记。
具体实施例方式
参见图l,本发明为一种在源程序层次实现运算符单步调试的方法,在解析或编译 源程序时,记录和存储表达式中运算符和相应操作数在源程序中的位置数据;当用户使用 运算符单步调试命令时,调试器执行以下步骤1、2、3 : 步骤1,当用户使用运算符单步调试命令时,启动执行调试对象程序进程,通过调 试对象程序进程实现以下步骤1. 1和步骤1. 2, 步骤1. l,判断调试器是否执行调试对象程序进程至一个运算符,若是则对于调 试器执行调试对象程序进程所至的运算符,获得已存储的该运算符和相应操作数的位置数 据; 步骤1. 2,根据位置数据把该运算符和相应操作数加上标记,并把加上标记后的运 算符和相应操作数的源程序代码在调试器窗口中显示给用户; 步骤2,在步骤1. 2执行完毕后暂停调试对象程序进程,等待用户要求继续执行运 算符单步调试命令; 步骤3,当用户要求继续执行运算符单步调试命令时,执行加上标记后的运算符和 相应操作数的求值计算,计算完成后取消标记;然后继续执行调试对象程序进程,返回至步 骤1. 1循环执行以实现对下一个运算符单步调试,直到步骤1. 1判断出调试器执行调试对 象程序进程至没有运算符时为止。当步骤l. l判断发现不存在下一个需要单步调试的运算 符,实际实施时可能是用户当前需要检查的表达式已经处理完毕,那么就可以执行其它不 带运算符的源代码进行处理。例如,在c语言中,printf中可以没有运算符,但这类代码也 要执行完毕,调试对象程序进程才结束。 值得注意的是,步骤3中当用户要求继续执行运算符单步调试命令时,步骤1中当 用户使用运算符单步调试命令时,响应此命令的操作不同。可以视为,根据是否有加标记的 运算符和相应操作数,采用不同响应此命令的操作。如果有加标记的运算符和相应操作数, 才执行求值计算和取消标记的操作。如果没有加标记的运算符和相应操作数,则是执行判 断是否有运算符和相应加标记操作。具体实施时,运算符单步调试命令据此汇编即可。
为了准确考察所述表达式中运算符和相应操作数在源程序中的位置数据,本发明 还提出,事先存储的位置数据包括有这个表达式所在的源程序的源文件名,运算符和相应 操作数在源程序文件窗口中的行号,运算符的字符串在源程序文件窗口中第一个字符列号 和最后一个字符列号,相应操作数的字符串在源程序文件窗口中第一个字符列号和最后一 个字符列号。 为了便于用户查看,本发明提出可以对运算符的字符串和操作数的字符串施加标 记,例如加上背景色亮条的高亮显示、颜色反转显示、加上下划线、加上字符边框、修改字符 字体/字符字号/字符字形的高亮显示等手段。这些手段也可以综合使用,例如同时加上 背景色亮条和下划线。
以下参照附图和实施例,对本发明技术方案予以详细说明。 实施例一用C语言程序作为调试对象,图2中,表示了 C语言程序中的一个表达式
5语句"d = a_b*c"。在解析或编译源程序时,记录和存储了这个表达式中所有的运算符和操 作数在源程序中的位置数据。具体实现过程如下 (1)用户使用运算符单步调试命令,调试器响应该命令执行启动执行调试对象程 序进程(是一个c语言程序进程),执行至表达式中的运算符"*",获得已经记录和存储的 这个运算符"*"以及它的两个操作数"b"和"c"所在源文件的文件名、在源程序窗口中的 行号和列号等位置数据,包括第一个操作数字符串"b"在源程序窗口中的第一个字符b的 列号和最后一个字符b的列号,包括第二个操作数字符串"c"在源程序窗口中的第一个字 符c的列号和最后一个字符c的列号。根据这些位置数据把运算符、"、操作数"b"和"c" 三个字符串颜色反转显示。图3中,反转颜色显示标记的这个表达式"b化"表示将要执行 的一个计算动作,用户能够清晰地了解这个计算动作的运算符"f和它的操作数b和c。
调试器暂停执行调试对象程序进程,等待用户给出继续执行的调试命令。
用户继续使用运算符单步调试命令,执行这个运算动作"b*c",取消加在三个字符 串"b "、" * "和"c "上的颜色反转显示标记。 (2)调解器执行至表达式中的运算符"-",获得已经记录和存储的这个运算符"-" 以及它的两个操作数"a"和"b化"的所在的源文件的文件名、在源程序窗口中的行号和列 号等位置数据,包括第一个操作数字符串"a"在源程序窗口中的第一个字符a的列号和最 后一个字符a的列号,包括第二个操作数字符串"b*c"在源程序窗口件中的第一个字符b 的列号和最后一个字符c的列号。根据这些位置数据把运算符"-"、操作数"a"和"b化"三 个字符串颜色反转显示。图4中,颜色反转显示标记的这个表达式"a-b化"表示将要执行 的一个计算动作,因为用户已经知道了上一个计算动作是"b化",因此用户能够清晰地了解 这个计算动作的运算符"_"和它的操作数"a"和"b*c"。 调试器暂停执行调试对象程序进程,等待用户给出继续执行的调试命令。 用户继续使用运算符单步调试命令,执行这个计算动作"a-b化",取消加在三个字
符串"a"、"-"和"b化"上的颜色反转显示标记。
(3)调解器执行至表达式中的运算符"=",获得已经记录和存储的这个运算符 "="以及它的两个操作数"d"和"a-b*c"所在源文件的文件名、在源程序窗口中的行号和 列号等位置数据,包括第一个操作数字符串"d"在源程序窗口中的第一个字符d的列号和 最后一个字符d的列号,包括第二个操作数字符串"a-b化"在源程序窗口中的第一个字符a 的列号和最后一个字符c的列号。根据这些位置数据把运算符"二"、操作数"d"和"a-b化" 三个字符串颜色反转显示。图5中,颜色反转显示标记的这个表达式"d = a-b化"表示将 要执行的一个计算动作,因为用户已经知道了上一个计算动作是"a-b化",用户能够清晰地 了解这个计算动作的运算符"="和它的操作数"d"和"a_b*c "。
调试器暂停执行这个C语言程序进程,等待用户给出继续执行的调试命令。
用户继续使用运算符单步调试命令,执行这个计算动作"d = a-b化",取消加在三 个字符串"d"、"="和"a_b*c "上的颜色反转显示标记。
(4)然后调试器继续执行这个C语言程序其它代码。 本发明实施例一中,清晰的说明了,源程序层次实现运算符单步调试方法在源程 序层次可视地跟踪源程序表达式中运算符计算动作的执行流程,在每一个运算符计算动作 后可以观察变量的值的改变和这个运算符计算表达式的计算结果。
如果标记是给运算符字符串和操作数字符串加上背景色亮条的高亮显示,并且运 算符字符串的背景亮条和操作数字串的背景亮条的颜色不一样,用户就可以直观地分辨出 目前将要进行计算的运算符和它的操作对象。 实施例二用C语言程序作为调试对象,图6中,表示了 C语言程序中的一个for循 环语句"for(i = 1 ;i <= 100 ;i++)sum+ = 1 ;"。在解析或编译源程序时,在解析或编译 源程序时,记录和存储了这个for循环语句的表达式中所有的运算符和操作数在源程序中 的位置数据。具体实现过程如下 (1)用户使用运算符单步调试命令,调试器执行这个C语言程序进程,调试器执行 至for语句的表达式1 "i = 1"中的运算符"="时,获得已经记录和存储的这个运算符 "="以及它的两个操作数"i "和"1"所在源文件的文件名、在源程序窗口中的行号和列号 等位置数据,包括第一个操作数字符串"i"在源程序窗口中的第一个字符i的列号和最后 一个字符i的列号,包括第二个操作数字符串"l"在源程序窗口中的第一个字符l的列号 和最后一个字符1的列号。根据这些位置数据把运算符"="、操作数""和"1"三个字符 串颜色反转显示。图7中,颜色反转显示标记的这个表达式"i = l"表示将要求解的一个 表达式计算。 调试器暂停执行这个C语言程序进程,等待用户给出继续执行的调试命令。
用户继续使用运算符单步调试命令,执行这个表达式"i = l"求值计算,取消加在 三个字符串"i "、"="和"1"上的颜色反转显示标记。 (2)调试程序执行这个C语言程序至for语句的表达式2 " i < = 100 "中的运算 符" < ="时,获得已经记录和存储的这个运算符" < ="以及它的两个操作数"i "和"100 " 所在源文件的文件名、在源程序窗口中的行号和列号等位置数据,包括第一个操作数字符 串"i"在源程序窗口中的第一个字符i的列号和最后一个字符i的列号,包括第二个操作 数字符串"100"在源程序窗口中的第一个字符1的列号和最后一个字符0的列号。根据这 些位置数据把运算符"< ="、操作数"1"和"100"三个字符串颜色反转显示。图8中,颜色 反转显示标记的这个字符串"i <= IOO"表示将要求解的一个表达式计算。
调试器暂停执行这个C语言程序进程,等待用户给出继续执行的调试命令。
用户继续使用运算符单步调试命令,执行这个表达式"i <= IOO"求值计算,取消 加在三个字符串"i "、" < ="和"100 "上的颜色反转显示标记。 (3)如果表达式"i <= 100"的值为真,调试器执行这个C语言程序至for语句的 循环体表达式"811111+ = 1"中的运算符"+ ="时,获得已经记录和存储的这个运算符"+ =" 以及它的两个操作数"sum"和"i "所在源文件的文件名、在源程序窗口中的行号和列号等 位置数据,包括第一个操作数字符串"sum"在源程序窗口中的第一个字符s的列号和最后 一个字符m的列号,包括第二个操作数字符串"i "在源程序窗口中的第一个字符i的列号 和最后一个字符i的列号。根据这些位置数据把运算符"+ 二"、操作数"sum"和"i"三个
字符串颜色反转显示。图9中,颜色反转显示标记的这个字符串"別!11+ = i"表示将要求解
的一个表达式计算。 调试器暂停执行这个C语言程序进程,等待用户给出继续执行的调试命令。
(4)用户继续使用运算符单步调试命令,执行这个表达式"別!11+ = i"求值计算,取 消加在三个字符串"sum"、"+ ="和"i "上的颜色反转显示标记。
调试程序执行这个C语言程序至for语句的表达式3 " 中的运算符"++"时, 获得已经记录和存储的这个运算符"++"以及它的操作数"1"所在源文件的文件名、在源程 序窗口中的行号和列号等位置数据,包括操作数字符串"i "在源程序窗口中的第一个字符 i的列号和最后一个字符i的列号,因为字符串"i"只有一个字符,因此实际上第一个字符 和最后一个字符都是i。根据这些位置数据把运算符"++"和""两个字符串颜色反转显 示。图10中,颜色反转显示标记的这个表达式"1++"表示将要求解的一个表达式计算。
调试器暂停执行这个C语言程序进程,等待用户给出继续执行的调试命令。
用户继续使用运算符单步调试命令,执行这个表达式"1++"求值计算,取消加在两 个字符串"++"和"i "上的颜色反转显示标记。 (5)按照for语句的执行过程,for表达式2将是下一个被标记的表达式,用户继 续使用运算符单步调试命令后,表达式2的计算值将会确定是否继续这个for循环还是结 束这个for循环。 本发明实施例二,清晰的说明了,源程序层次实现运算符单步调试方法还可以在 源程序层次可视地跟踪源程序一条语句中各个表达式求解的执行流程。在每一个表达式计 算后可以观察变量值的变化和表达式计算结果。
权利要求
一种在源程序层次实现运算符单步调试的方法,其特征在于在解析或编译源程序时,记录和存储表达式中运算符和相应操作数在源程序中的位置数据;调试器执行以下步骤,步骤1,当用户使用运算符单步调试命令时,启动执行调试对象程序进程,通过调试对象程序进程实现以下步骤1.1和步骤1.2,步骤1.1,判断调试器是否执行调试对象程序进程至一个运算符,若是则对于调试器执行调试对象程序进程所至的运算符,获得已存储的该运算符和相应操作数的位置数据;步骤1.2,根据位置数据把该运算符和相应操作数加上标记,并把加上标记后的运算符和相应操作数的源程序代码在调试器窗口中显示给用户;步骤2,在步骤1.2执行完毕后暂停调试对象程序进程,等待用户要求继续执行运算符单步调试命令;步骤3,当用户要求继续执行运算符单步调试命令时,执行加上标记后的运算符和相应操作数的求值计算,计算完成后取消标记;然后继续执行调试对象程序进程,返回至步骤1.1循环执行以实现对下一个运算符单步调试,直到步骤1.1判断出调试器执行调试对象程序进程至没有运算符时为止。
2. 如权利要求1所述在源程序层次实现运算符单步调试的方法,其特征在于所述表 达式中运算符和相应操作数在源程序中的位置数据,包括这个表达式所在的源程序的源文 件名,运算符和相应操作数在源程序文件窗口中的行号,运算符的字符串在源程序文件窗 口中第一个字符列号和最后一个字符列号,相应操作数的字符串在源程序文件窗口中第一 个字符列号和最后一个字符列号。
3. 如权利要求1或2所述在源程序层次实现运算符单步调试的方法,其特征在于所 述标记包括给运算符的字符串和操作数的字符串加上背景色亮条的高亮显示。
4. 如权利要求1或2所述在源程序层次实现运算符单步调试的方法,其特征在于所 述标记包括给运算符的字符串和操作数的字符串颜色反转显示。
5. 如权利要求1或2所述在源程序层次实现运算符单步调试的方法,其特征在于所 述标记包括给运算符的字符串和操作数的字符串改变字符的字体颜色的高亮显示。
6. 如权利要求1或2所述在源程序层次实现运算符单步调试的方法,其特征在于所 述标记包括给运算符的字符串和操作数的字符串加上下划线。
7. 如权利要求1或2所述在源程序层次实现运算符单步调试的方法,其特征在于所 述标记包括给运算符的字符串和操作数的字符串加上字符边框。
8. 如权利要求1或2所述在源程序层次实现运算符单步调试的方法,其特征在于所 述标记包括修改运算符的字符串和操作数的字符串的字符字体、字符字号或字符字形的高 亮显示。
全文摘要
本发明涉及一种在源程序层次实现应用程序运算符单步调试的方法,调试人员使用运算符单步调试命令调试应用程序时,调试器执行应用程序进程并搜索应用程序表达式中的运算符,当搜索到一个运算符时,把这个运算符和它的操作数加上标记,调试器暂停;用户继续使用运算符单步调试命令后,先执行加了标记的运算符表达式求值计算,然后取消加了标记的运算符和操作数上的标记,调试器继续执行应用程序进程和搜索下一个运算符,直到调试程序结束。本发明有益的效果在于能够方便调试人员在源程序层次可视地跟踪高级语言源程序表达式中各个运算符计算动作的执行流程,在每一个运算符计算动作后可以观察变量的值的改变和计算表达式的计算结果。
文档编号G06F11/36GK101794252SQ20091027336
公开日2010年8月4日 申请日期2009年12月23日 优先权日2009年12月23日
发明者张曙光 申请人:张曙光
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1