编程IDE不仅需要集成编辑器、编译器和链接器,调试器自然也是必不可少的。

程序写出来后,总是有这样那样的错误,调试技巧就显得很重要了。

另外,对于一些理解一些复杂的算法,在关键的一些代码段通过单步调试,便能加深理解。

所以说,调试对于编程来说,不但必不可少而且还很重要。

调试的一个很重要的方面,就是知道如何在一些调试窗口中查看自己想要了解的内容。

观察窗口

调试程序时,你可以使用观察(Watch)窗口监视变量和表达式。你可以直接在观察窗口里输入表达式,也可以从源代码中、变量(Variable)窗口中、存器(Register)窗口中、内存(Memory)窗口中、以及调用堆栈(CallStack)窗口中将表达式拖过来。

当你监视一个单独的变量时,你可以在调试过程中在Value一栏修改该变量的值。这个技术对于进行实验性的调试和暂时修复错误非常有用。

变量窗口

变量(Variables)窗口有三个标签:Auto标签自动显示了当前语句和前一条语句用到的变量;Locals标签显示当前函数的局部变量;this标签显示了 this指针执行的对象。Auto标签也显示函数返回值,但它只在返回值是32位或更少时才有效。如果你仅仅是在跟踪代码,变量窗口可以让你看到什么正在进行,而不用频繁地将变量输入到观察窗口中。

内存窗口

使用内存(Memory)窗口可以显示从一特定地址幵始的虚拟内存。你还可以使用内存窗口来修改内存单元的值,用鼠标单击值,或者使用Tab键切换到值单元,然后就可以输入你所想的值了。你可以在上下文菜单里选择Byte Format、Short Hex Format、或者Long Hex Format来决定如何显示内存单元的值。

内存窗口最有趣的特性是Address框,它允许你指定从哪个虚拟内存地址开始显示。Address框接受虚拟内存地址(例如0x00400000)、变量(例如rect、*pRect或者*this)或者寄存器(例如ESP)。需要注意的是,对于变量你需要给出的是对象,而不是对象的指针。例如,你有一个指向矩形的指针,你应该输入解除参照的指针(例如*pRect)来得到正确的地址。如果你给出的是寄存器,虚拟内存地址将立即被寄存器的值替换,所以不要以为内存窗口显示的内容将随着寄存器的改变而改变。如果你没有看到Address框,在上下文菜单里选择Toolbar选项。另外,除了使用Address框,你还可以使用Edit菜单里的Go To命令。

你可以直接在内存窗口里输入地址,也可以从源代码中、观察窗口中、变量窗口中、寄存器窗口中以及调用堆栈窗口中将地址和变量拖过来。但要注意,拖动的目的地是内存数据列表,而不是Address框。

寄存器窗口

使用寄存器(Register)窗口可以监视CPU的寄存器、标志值以及浮点堆栈。你还可以使用寄存器窗口来修改寄存器的值,用鼠标单击值,或者使用Tab键切换到值单元,然 后就可以输入你所想的值了。

显然,你不应该改变一个寄存器的值,除非你能确切知道你在做什么。即使你知道你在做什么,你也应该尽量避免使用这个窗口改变寄存器的值,因为通常你还可以通过应用 另一种调试特性找到一种更简单、风险更小的方法来完成同样的任务。例如,你可以通过 改变EIP寄存器来修改当前执行指令,但完成这个任务的更好的方法是使用Set Next Statement命令,它的好处在于当你试图做一些实在很愚蠢的事情时,它会警告你。

调用堆找窗口

使用调用堆栈(Call stack)窗口可以显示引起当前源代码语句执行的一系列函数凋用,当前函数在堆栈的顶端。你可以直接在调试器中检查函数的返回值,所以你不必为了查看返冋值而专门在代码中加一个临时变量并重新编译。如果返回值不大于32位,它会被直接放在EAX寄存器里。你可以在寄存器窗口中查看,或者在观察窗口中键入“@EAX”。如果返回值仅为64位,其低32位会放在EAX寄存器中,高32位放在EDX寄存器中。如果返回值长度大于64位,会在EAX寄存器中放入指向返回值的指针,可以通过在观察窗口中进行类型转换(例如,若某函数返—个CRect,则可以键入“(CRect*)@EAX”显示结果),或在内存窗口的Address 栏中直接键入“EAX”会查看返回值。

调用堆找窗口在理解一些递归函数的调用时特别有用。

反汇编代码窗口

使用反汇编代码(Disassembly)窗口可以查看编译器生成的对应于源代码的汇编指令。你可以使用Edit菜单里的Go To命令显示特定代码地址处的汇编代码。使用反汇编代码窗口很像使用只读的源代码窗口,但有了更多的控制。具体地说,你可以使用Insert/Remove Breakpoint命令设置断点,可以使用Set Next Statement命令改变程序的执行,还可以使用Show NextStatement命令来确定当前程序语句。通过设置Source Annotation和Code Bytes选项可以选择如何显示汇编代码。你还可以使用Go To Source 命令显示相应的源代码。所有这些命令都在上下文菜单里。

-End-

1.《【callstack】编程|程序调试之调试窗口》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【callstack】编程|程序调试之调试窗口》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.cxvn.com/gl/djyxgl/170568.html