从 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++ 解决方案的主要内容,如果未能解决你的问题,请参考以下文章