在 C# 中调试 c++ dll
Posted
技术标签:
【中文标题】在 C# 中调试 c++ dll【英文标题】:Debug c++ dll in C# 【发布时间】:2010-11-06 23:14:09 【问题描述】:我有一个来自 c++ 的 .dll,我想在 C# 中调试它,但我不知道怎么做。
当我编译 c++ 项目时,Visual Studio 要求我执行一个“.exe”。
我想我必须创建一个项目来执行 dll。
可是我迷路了,怎么调试呢?
【问题讨论】:
【参考方案1】:如果我对您的理解正确,您想在调用您也创建的 DLL 的 C# 项目中调试您创建的 C++ 编码的 DLL?
我之前通过进入您的 C# 项目属性并在“调试”部分下选中“启用非托管代码调试”复选框来完成此操作。这应该允许您进入您的 C++ DLL。
【讨论】:
另外,在 Visual Studio 2012 中,我找到了名为“启用本机代码调试”的选项 ...是的,这就是我的 VS 2017 Pro 所具备的——没有“启用无人代码 deb”。 类似地,如果您有一个 C# DLL 需要在原生 c++ 项目中调试,请在原生 c++ 项目的调试部分选择“调试器类型 = 混合”。这将允许进入 cli/clr 和 c# 代码。 有人知道如何在 VSCode 中为 .NET Core 应用程序配置这个吗?【参考方案2】:要从 C# 调试 C++,您必须做几件事。
-
将 C# 项目添加到调试应用程序的解决方案中。
在项目属性的“调试”选项卡上将 C# 项目的属性编辑为“允许非托管代码调试”。
将 C++ 项目设置为 C# 项目的依赖项。
在 C# 项目中编写代码以使用 P/Invoke 或 COM 使用 DLL。
在 C++ 代码中设置一些断点并运行 C# 项目。
【讨论】:
【参考方案3】:我在 Visual Studio 2019 中通过选择“启用本机代码调试”克服了这个问题,如我的 C# 项目的属性下所示。
【讨论】:
【参考方案4】:Visual Studio 无法自行执行 dll。
您需要在 dll 项目的属性中设置将使用 C++ dll 的启动 .exe。您可以通过 properties --> debugging --> command 指定将调用您的 dll 的可执行文件的路径以及所需的任何命令行参数。
【讨论】:
【参考方案5】:对于 VS 2017 Pro,右键单击主项目(解决方案中的 c# 项目)的属性页。在“调试”菜单项中,找到“调试器引擎”中的选项,选择“启用本机代码调试”。
【讨论】:
【参考方案6】:为了补充 heavyd 和 CCicotta 和 Noobie3001 的有用答案,在 Visual Studio 2017 中,当附加到调用 C++ DLL 的正在运行的 C# 进程时,我还必须更改以下内容:在 Debug > 附加到进程...,确保本机代码由附加到:
列出【讨论】:
【参考方案7】:SOS (Son of Strike) 调试扩展 (SOS.dll) 帮助您调试 Visual Studio 中的托管代码,提供有关 内部 CLR 环境
参考以下文章:-
MSDN ARTICLE
【讨论】:
【参考方案8】:“调试”选项卡中的“允许非托管代码调试”选项适用于大多数人,但不适用于我。我必须手动选择“Native”,如下所示在我的 c# 代码中调试 c++ dll。 仅供参考:我使用的是 vs2019,dll 是用 c++ 编写的,并使用“dllimport”加载到 C# 应用程序中。
【讨论】:
以上是关于在 C# 中调试 c++ dll的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以调试从 C# DllImport 调用的 c++ dll?
C#调用C++DLL的小总结5---和C++的DLL的联合调试
调试由 C# Visual Studio 2010 插件导入的 C++ dll