我们正在为Release构建解决方案,但是当尝试使用studio 2010 professional进行附加时,没有任何线程显示任何堆栈信息,也不能设置任何断点等。
目标是能够将Visual Studio / JIT调试器附加到正在运行的进程,同时尽可能多地获得优化。
我们的大多数搜索都归结为'使用debug编译:完全'并且您将能够进行调试,但似乎并非如此,我认为JIT在运行时优化代码,因此我们不能调试,这是真的吗? 是否有可能编译并告诉JIT淡化优化并允许调试? (同时保留其他优化)
更新
使用@ HansPassant的答案,我查看了模块并看到虽然pdbs与二进制文件位于同一目录中,但实际上并没有加载调试符号。我也看到我的库标记为'用户代码' - '否',这可能是它没有自动加载的原因。 通过手动加载符号并禁用'just-my-code',我还可以设置断点并查看堆栈。
现在问:为什么我的代码没有标记为用户代码?这是正常的行为吗?我可以通过某种方式将其配置到我的程序集中以避免这种情况吗?
答案 0 :(得分:15)
调试优化代码并不是一件很愉快的事情。您当然可能无法设置断点,可能已经内联了一种方法。当变量被优化为存储在cpu寄存器中时,检查局部变量和方法参数可能会使调试器变得阴沉。
但是你当然可以检查调用堆栈,你会看到堆栈跟踪中没有内联的方法。你可能犯的基本错误:
答案 1 :(得分:2)
我想我会跟进一个关于你更新的问题的补充答案,以帮助他人。
为了区分用户代码和非用户代码,Just My Code查看符号(.pdb)文件和程序优化。当优化二进制文件或.pdb文件不可用时,调试器会将代码视为非用户代码。