作者:不及格的程序员-八神
在vs2010中默认不支持混合型调试,需要手动设置项目的属性.成功之后就可以在调试环境中同时断点托管代码与win32的c++代码了.
下面图片展示如何设置托管项目与win32项目的属性.
另外利用vs2010也可以附加到已经运行的应用程序,无论是win32程序还是托管程序.
通过菜单中的工具->附加到进程,在调试代码类型中,同时选中托管与本机类型,这样就可以调试iis进程(aspnet_wp.exe)中的托管代码与在平台调用加载的win32 dll库了(最好将dll库的pdb文件也一同放到bin目录中.)
.如下图所示:
前面介绍的调试方法也有不足,目前vs调试器只能显示出寄存器的值,而不能修改(在托管项目里的断点是不能更改寄存器值的,但当断点到了win32项目中,就可以在即时窗口中修改寄存器的值了,比如eax=0x....)
另外,如果是在win32项目里加入了托管理代码,那么默认状态下在Release版是无法调试断点的,很多源码被JIT优化掉了,禁止这一优化可以在链接器属性性将/assemblydebug 打开.
真正属于程序员的调试工具windbg.
通过在windbg中附加调试托管程序或win32程序时,设置指符号路径后,再打托管代码/c++ 源码,在相应行中设置断点就可以调试了,同时也可以修改寄存器的值.
总结:除非真的需要,一般使用visual studio 就可以满足在软件调试中遇到的大部分问题,它使用方便.而windbg需要各种命令配合,不过功能非常强大.