假设我有一个抛出异常的函数。假设此函数由第三方DLL调用,第三方DLL将处理我抛出的异常。
如果Visual Studio决定第三方DLL不是“用户代码”(如下图所示),那么默认情况下它将在我的异常中停止,即使稍后处理它。这样做并不完全错误;它清楚地解释了该例外是由用户代码未处理的。但是,是什么让Visual Studio将某些DLL称为“用户代码”,而其他人则没有?
我有一个理论认为这是因为没有加载符号,但是列表中的模块已经加载了符号,但仍然不被视为“用户代码”。
答案 0 :(得分:12)
是的,没有.pdb文件,调试器无法判断它是否是用户代码。在MSDN article:
中可以很好地解释它为区分用户代码和非用户代码,Just My Code会查看三件事:DBG文件,PDB文件和优化。
在标准的Debug构建中,关闭优化并为所有模块创建调试符号。运行调试版本时,这些模块被视为用户代码。但是,如果我调用优化且没有调试符号的库函数,则它不是用户代码。 Just My Code可以防止执行在库代码中的断点处停止,这通常不是您对调试感兴趣的代码。在“断点”窗口中,这些断点将显示“已禁用断点”图标。