请问张老师一个调试器中修改函数代码继续执行的问题
Windows内核调试
请问张老师一个调试器中修改函数代码继续执行的问题
jlflyfox
2010-08-17, 19:23 下午
一般来说,我们正在调试的时候不需要修改代码,但也有例外。
比如用vc调试一个函数,在这个函数中已经走了两步了,临时发现这个函数下面几行写得有问题,我们就立即修改保存,即可在这个函数执行过程中修改代码,而不用关闭进程,重新调试。
我想问的是,这个是如何实现的?
vc重新编译,关键是如何把编译好的局部二进制代码放到内存中,而且保存了上下文继续执行。
请张老师或其他高手指点下,我看《软件调试》里面似乎没有说这个。
当然如果上下内容修改太多,调试器一般会告诉调试者无法继续,这个是调试器本身业务逻辑判断了的,这个我倒不关心。
Re: 请问张老师一个调试器中修改函数代码继续执行的问题
格蠹老雷
2010-08-18, 21:10 下午
这个功能叫EnC, Edit and Continue,当初引入PDB符号文件格式,一个原因就是为了支持这个功能。简单来说主要是要做增量编译,除了执行点要匹配外,还要检查局部变量和全局变量的变化...
这个功能太偏编译器和调试器细节了,有点超出《软件调试》想覆盖的范围 :-)
Re: 请问张老师一个调试器中修改函数代码继续执行的问题
jlflyfox
2010-08-20, 12:09 下午
谢谢!
Re: 请问张老师一个调试器中修改函数代码继续执行的问题
ggggchen
2010-09-28, 01:26 上午
我一般是直接用WINDBG,修改@EIP寄存器,跳到想去的行,另外可以用ED,把内存内容改成我希望的.
你说的EDIT AND CONTINUE 太高深了
Re: 请问张老师一个调试器中修改函数代码继续执行的问题
爱杀之爪
2010-09-28, 17:44 下午
同ls,太深奥了,直接ed