从 C# 解决方案调试 C++ 解决方案

Posted

技术标签:

【中文标题】从 C# 解决方案调试 C++ 解决方案【英文标题】:Debugging C++ solution from C# solution 【发布时间】:2017-07-19 21:19:02 【问题描述】:

我有两个 VS 解决方案。解决方案A_sol 是 C++/C# 项目。解决方案B_sol 有项目B_proj,它是由A_sol 中的B_proj 项目生成的C++ *.dll 的C# 包装器。 如何从 B_proj 调试 A_proj ? 更新:B_sol 中的一个项目是一个可执行文件。

【问题讨论】:

一旦代码已经运行,它是 exe 代码还是库代码并不重要 - 都是一样的 ;) 【参考方案1】:

如何从 B_proj 调试 A_proj?

如果我理解正确的话,A_proj 是一个 C++ 项目。下面我将根据这个假设给出我的建议。

请注意,只要您有调试信息(换句话说,对于 C++ 项目 - 如果 Visual Studio 能够获取 PDB),您从哪个项目/解决方案开始调试并不重要。

因此,您可以从解决方案运行可执行文件,或者按照@hoodaticus in his answer 的建议,附加到已经运行的进程。无论您的项目是否可执行,您都可以附加到它,只要:

    DLL 被加载到该进程中 您拥有与 DLL 匹配的 PDB 文件(在构建期间生成)

所以我会重复同样的建议

在另一个项目中,执行 Debug > Attach to Process > 选择您的进程 从列表中。

但我要补充一点,您必须注意为包含您的 C++ dll 的进程选择“调试这些代码类型 -> 本机”。这部分经常被漏掉,让人迷惑,花点时间去发现(我个人经常深入)

希望对您有所帮助。

【讨论】:

【参考方案2】:
    在调试器之外运行要调试的进程。 在另一个项目中,执行“调试”>“附加到进程”> 从列表中选择您的进程。

【讨论】:

问题是A_sol(生成 C++ .dll 的那个)不是一个可执行的解决方案。它纯粹是一个库解决方案。 @newprint - 如果你的库没有在任何可执行文件中使用,那么你就不需要调试它,所以这是一个自我解决的问题。如果它在可执行文件中使用,那么您可以运行该可执行文件并使用 Attach to Process 从您的库解决方案中调试它,就像我说的那样。【参考方案3】:

为了能够通过按 F5 进行调试(而不是每次都选择您的进程),

右键单击启动项目(EXE)并选择属性 在“调试”选项卡中,选择“启用本机代码调试”

以上步骤来自本教程:https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-debug-managed-and-native-code?view=vs-2019

【讨论】:

以上是关于从 C# 解决方案调试 C++ 解决方案的主要内容,如果未能解决你的问题,请参考以下文章

混合模式调试(C++、C#、VB)

调试时如何从 C# 应用程序步入 C/C++ DLL

在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

在纯本机模式下开始调试 C# 启动项目

什么是一 .pdb 文件?

在 C# 中调试 c++ dll