我们如何使用WPF / C#可执行文件调试DLL(使用本机C / C ++的bulit)源?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我们如何使用WPF / C#可执行文件调试DLL(使用本机C / C ++的bulit)源?相关的知识,希望对你有一定的参考价值。

假设我们有一个名为A(A.exe)的WPF / C#项目。它使用的是使用C ++ / CLI构建的DLL;它是项目B(B.Dll)而项目B依赖于项目D,它也是使用本机C / C ++(D.Dll)构建的DLL。

简单地A.exe - >使用B.Dll - >使用D.Dll

这是我的原生环境--Windows 10,Visual Studio 2017,Visual C / C ++ 141 .NET 4.6.1 / 4.7.1。

请注意,C ++ / CLI(CLR)项目是本机C / C ++函数的包装器,这意味着它被用作本机C / C ++和WPF / C#之间的中介,以及在一个Visual Studio解决方案下构建的所有项目,因此相应的项目被添加为其他项目的参考。

如上所述,启动程序是A.exe,它是WPF / C#项目。

问题是我无法通过Visual Studio 2017运行项目时调试C / C ++。

以下我已经尝试过的事情:

  • 在所有项目中将工作目录设置为构建路径(所有DLL,PDB和exe)。
  • 在Visual Studio 2017中设置符号路径。
  • 在各个项目中将Debugger Type设置为Mixed(在Project properties - > Debugging下)。
  • 设置(选中)Use Managed Compatibility Mode(在Visual Studio Debug-> Options-> Debugging下)。
  • 在WPF项目中设置(选中)Enable native code debugging选项(项目属性 - >调试 - >调试器引擎)。

至少在C ++代码上标记的单个断点上,我无法破坏执行。请帮忙解决这个问题。

谢谢。

答案

每个项目的目标输出文件名应该不同,否则首先加载模块的符号将对调试器可见。在我的情况下,A和D具有类似的目标输出文件名(不是暗示项目名称)。由于A是目标可执行文件,因此其pdb会覆盖Projects D的pdb。不过,配置我在问题中提到的内容是明智的。

以上是关于我们如何使用WPF / C#可执行文件调试DLL(使用本机C / C ++的bulit)源?的主要内容,如果未能解决你的问题,请参考以下文章

关于“调试会话的可执行文件”对话框

如何使用交叉编译的构建调试 Qt dll 问题?

从 z/OS 上的 C 语言可执行文件中删除符号信息

vc 如何查看dll文件

c#2005调试程序正常,生成了引用的dll文件,但是生成程序后在其他机器上使用,总是出现缺少程序集的错误

什么软件能将C语言的执行文件反汇编为汇编源代码