勾上之后, 一个副作用是, 如果你的managed代码是打开了优化的, VS中Release版默认是优化的, 那么即使代码确确实实是你自己写的, Debugger也硬说不是你写的, 照样是不能调试.
勾上之后, 还发现了一个副作用, 如果你在同时Attach 了Managed和Native两种调试目标, 那么native代码去不去了. 在Managed 代码中调用 pinvoke函数时, 按F11跟按F10一样, 直接跳过.
总之, 选与不选, 都有各自的弊病.
另外, 对于Managed代码, 虽然调试器老提示说不能evaluate一个符号原因是你的代码经过了优化, 但实际上优化过的managed代码对调试的影响是很小的, 还可以有其它的办法让CLR禁止优化, 毕竟Managed代码跟实际在CPU上执行的代码中间还隔了一层. 办法就是在Options/Debugging/General 选项页的最后面, 选上:
这个勾上之后, 挡不住那些已经被优化过的代码, JIT应该不会对同样的managed代码编译两次. 办法是在程序刚刚启动时马上断在一个对话框处, 此时系统的大部分代码应该还没有机会被JIT编译, 这时attach程序, 则后面JIT的工作就不会再做优化了, 以上在实际使用中证实可行, 但仍只是我的猜测.
阅读(2798) | 评论(0) | 转发(0) |