其中是调试信息(断点等)存储在本机C++dll项目VS2013中的位置

本文关键字:C++dll 本机 项目 VS2013 位置 存储 调试 信息 断点 | 更新日期: 2023-09-27 18:29:09

我想知道在调试c++本机dll项目时,调试信息存储在哪里。

我的解决方案中有两个项目,C#管理项目和C++dll项目。当我插入断点本机dll时,vs在C#使用dllimport的本机调用中停止得很好。而且,我直接将本机dll复制到托管项目中(所以托管项目只有本机项目的本机dll文件,没有pdbfile),vs也停止了本机调用中的断点!是什么使这成为可能?托管项目没有本机dll的pdb文件的信息,但vs似乎仍然可以访问本机pdb文件。有人能解释吗?

其中是调试信息(断点等)存储在本机C++dll项目VS2013中的位置

无论应用程序是如何启动的(是否通过.net),调试非托管dll都是一样的。无论从何处加载dll,Visual Studio都会在同一目录中查找.pdb文件,并加载该文件(如果存在)。

您可以在输出窗口(调试->窗口->输出)中看到这种情况何时发生。你会看到这样一行:

'<your-exe>.exe': Loaded '<path-to-dll>'<your-dll>.dll', Symbols loaded.

但是,如果您正在编写.net应用程序,如果在.net应用程序项目设置(属性->调试->启用调试器)中关闭了"非托管代码调试",则不会发生这些情况。

PDB加载遵循许多规则。visualstudio的第一次尝试是假设DLL是在调试机器上构建的。dll中存在对pdb的完全限定引用。那条规则就是开火。稍后,它将使用_NT_SYMBOL_PATH变量,并且如果引用符号服务器,则可以从同一dll中查找pdb的多个版本。