不知道什么时候在debug时求值一个带函数调用的C++表达时的失败, 让我得出一个草率的结论: 微软的debug, 不管是windbg还是Visual studio其C++调试都不能调用一个函数. 这点, gdb确定是可以的.
但事实不然. 安装visual studio 2010之后, 想试验一下这个功能是否已有增强, 发现它是可以对C++函数调用进行求值的, 也就是说可以从调试器中调用一个函数, 只要是带有符号信息的函数, 无论它是库函数还是程序中的自定义函数. 继而用同样的程序在visual studio 2008中, 发现也是可以的. 在windbg中, 出我意料地, 却是不行.
visual studio中函数的evaluate, 无论是managed 还是native, 都会有一些情况下是不能成功evaluate, 比如代码被inline优化了. 想当初我可能是因为碰到过一次不能对函数调用求值的情况, 就简单认为visual studio就是无此功能.
但是, 在windbg中并非真的不能交互式地调用函数. 只不过是在上述的C++表达式中不行.
.call
如上图, windbg中通过这种方式调用函数时, 还可以在该函数中设置断点. 而且, .call命令提交后, 执行流会自己停止在被调用函数的开始处, 即使你没有在此处设置断点.
阅读(2025) | 评论(0) | 转发(0) |