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

时间:2018-03-01 12:34:41

标签: c# visual-studio visual-c++ c++-cli visual-studio-debugging

假设我们有名为 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 ++ <之间的中介。 / strong>和 WPF / C#以及在一个Visual Studio解决方案下构建的所有项目,因此相应的项目被添加为对其他项目的参考。

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

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

我已经尝试过以下事情:

  • 在所有项目中将工作目录设置为构建路径(所有DLL,PDB和exe)。

  • 在Visual Studio 2017中设置符号路径。

  • 在相应项目中将Debugger Type设置为Mixed(在项目属性 - &gt;调试下)。

  • 设置(选中)Use Managed Compatibility Mode(Visual Studio Debug-&gt;选项 - &gt;调试下的)。

  • WPF 项目中设置(选中)Enable native code debugging选项(项目属性 - &gt;调试 - &gt;调试器引擎)。

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

谢谢。

1 个答案:

答案 0 :(得分:0)

每个项目的

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