Visual Studio认为"用户代码"是什么?

Rom*_*kov 12 debugging visual-studio-2010 visual-studio-debugging

假设我有一个抛出异常的函数.假设此函数由第三方DLL调用,第三方DLL将处理我抛出的异常.

如果Visual Studio决定第三方DLL不是"用户代码"(如下图所示),那么默认情况下它将在我的异常中停止,即使它稍后处理.这样做并非完全错误 ; 它清楚地解释了用户代码未处理异常.但是,是什么让Visual Studio将一些DLL称为"用户代码"而其他人不是?

在此输入图像描述

我有一个理论认为这是因为没有加载符号,但是列表中的模块已经加载了符号,但仍然不被视为"用户代码".

Han*_*ant 12

是的,没有.pdb文件,调试器无法判断它是否是用户代码.它在MSDN文章中得到了相当好的解释:

为了区分用户代码和非用户代码,Just My Code查看了三件事:DBG文件,PDB文件和优化.

在标准的Debug构建中,关闭优化并为所有模块创建调试符号.运行调试版本时,这些模块被视为用户代码.但是,如果我调用优化且没有调试符号的库函数,则它不是用户代码.Just My Code可以防止执行在库代码中的断点处停止,这通常不是您对调试感兴趣的代码.在"断点"窗口中,这些断点将显示"已禁用断点"图标.