Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2346975
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2010-06-06 08:36:15

不知道什么时候在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命令提交后, 执行流会自己停止在被调用函数的开始处, 即使你没有在此处设置断点.
阅读(2016) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~