繁体   English   中英

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

[英]Where is location that Debug info (break point, etc) was stored in VS2013, native C++ dll project?

我想知道调试c ++本机dll项目时调试信息的存储位置。

我的解决方案中有2个项目,C#托管项目和C ++ dll项目。 当我插入断点本机dll时,vs在dllimport的C#本机调用中运行良好。 而且,我直接将本机dll复制到托管项目中(因此托管项目仅具有用于本机项目的本机dll文件,而没有pdbfile),也可以在本机调用中停止断点! 是什么使这成为可能? 托管项目没有有关本机dll的pdb文件的信息,但似乎vs仍可以访问本机pdb文件。 任何人都可以解释吗?

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

您可以在输出窗口(Debug-> Window-> Output)中查看何时发生这种情况。 您将看到类似以下的行:

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

如果您正在编写.net应用程序,则在.net应用程序项目设置(属性->调试->启用调试器)中关闭“非托管代码调试”时,不会发生任何情况

PDB加载遵循许多规则。 Visual Studio的首次尝试是假定DLL是在调试机上构建的。 在dll中有对pdb的完全合格的引用。 那条规则正在执行。 稍后,它使用_NT_SYMBOL_PATH变量,并且如果引用了符号服务器,则可以从同一个dll查找pdb的多个版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM