在调试的时候,当执行到一段代码时,为了调试或者其他目的需要,有时候需要对一些或者几行代码多次执行或者跳过几行代码的执行,这是很有用的,比如下面的一个循环:
for(int i=0;i<num;i++) { //do something }
也许num很大,但是我们又想看看前面几次循环执行的效果,这时候就需要前面提到的调试功能了,直接跳出循环,执行循环后面的代码。当然也可以跳到循环前面的代码执行,下面以对VC,Windbg和Linux的gdb三个调试器分别进行说明。
1.VC调试器的方法
VC对源代码级的调试支持得还是相当的好,特别是应用层代码的调试,而且执行到指定代码行的功能也是相当的简单,如下图所示。
将鼠标放在当前执行的代码行位置,这时会看到提示,说可以拖动箭头到想执行的代码行位置,然后就可以继续执行了。
2.Windbg方法
windbg可以用两种方法来达到这个目的。
第一种方法,如下图所示。
将焦点定位到你想执行的代码行,然后选择Edit菜单,选择“Set Current Instruction”子菜单即可,效果和VC一样。
第二种方法要麻烦一些,如下图所示。
可以通过修改eip的地址来达到执行指定代码行的功能,对x64位系统来讲,程序指针寄存器是rip,32位是eip,可以先执行r命令,查看寄存器的状态,如上图所示。然后切换到汇编模式,查看你想执行的那一行代码的地址,然后执行r rip=address命令来达到相同效果。
3.Linux gdb
gdb的功能很强大,要达到这个效果也很简单,如下图所示。
执行jump命令即可,如上图所示,想要到16行去执行,执行jump 16就可以了。
时间: 2024-11-10 00:16:43