在 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

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

调试从 C++ 调用的 C# dll(嵌入 Mono)

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