【问题标题】:Debugging c++ cli from c# - c++ breakpoints not hit从 c# 调试 c++ cli - c++ 断点未命中
【发布时间】:2021-09-26 10:18:22
【问题描述】:

我有一个 c# win-exe-64 项目的解决方案,该项目引用了一个 c++(托管、cli、64)库 vcxproj。使用 Visual Studio 16.10.3。

一切正常,我可以在 c# 中使用 c++ 中的类。

问题在于调试,单步执行 c++ 代码不起作用,并且 c++ 代码中的断点也未命中。 c++ 中的断点显示“当前不会命中断点。没有为此文档加载任何符号。”

在我检查“模块”窗口的 ide 中,它显示:“已加载符号”为此特定的 dll。在“进程”窗口中,它指示“调试:托管(.NET 4.x),本机”

我已经尝试了很多设置:

  • IDE:工具-选项-调试-使用托管兼容模式:开/关
  • win-exe:属性:启用本机代码调试:开/关
  • c++ 库:Properties.Debugging-Debugger 类型:混合(.net 框架)、原生

但没有任何帮助,断点只是没有命中。

还有什么让我感到奇怪的是,在 c#-code 中对 c++ 类成员的“转到定义”只会带来从元数据生成的类定义,它不会转到源代码。

有什么想法吗?

更新:显示从 exe 文件夹加载的模块窗口、dll 和 pdbs 的屏幕截图。右窗口主进程 c# exe 在左窗口中调用 c++ dll。

【问题讨论】:

  • 您是否在启用调试的情况下构建了 c++ 代码,并且是否将 DLL 和 PDB 都复制到了 C# 调试文件夹中?
  • 是的,调试已开启,dll和pdb在exe的debug文件夹中
  • 调试器对 DLL 很满意,因此“此文档”有问题。问题中没有任何线索,但有点可能发生的事故是源文件已更改并且不再与用于构建 DLL 的源匹配。不要手动复制那个 DLL,很可能会忘记这样做。现在您将加载一个过时的 DLL 副本。
  • 错误消息不是“源文件已更改,不再与用于构建 DLL 的源匹配”。它的“断点当前不会被命中。没有为此文档加载任何符号。”但它们已加载。请参阅模块窗口。我也不会手动复制 dll 和 pdb,它会在构建过程中自动完成。
  • “查看模块窗口”是什么意思?您忘记附上图片了吗?

标签: c# c++ .net debugging managed


【解决方案1】:

有几种可能的解决方案。在这里,我提到其中一些我遇到过的。

  1. 确保您的 VS Solution Configurations 处于 Debug 模式。

  2. 删除所有以前的调试点。 (调试 -> 删除所有断点)

    从 VS 卸载项目。 (或关闭VS)

    从文件资源管理器中删除所有以前的 bin、obj、x64/x84 文件夹。

    打开 VS 并在 VS 中加载项目。

    清理项目 -> 设置调试指针 -> 构建 -> 运行

  3. 调试 -> 选项 -> 常规 -> 从选项“仅启用我的代码”中删除复选标记

    (如果第 1 点和第 2 点足够注意,它在某些情况下也可以使用)

当我遇到类似问题时,我按照第 1 点和第 2 点解决了。

为了您的方便,我提供了我的可行 VS 的屏幕截图。

VS 调试 -> 选项 -> 常规 ->

项目属性 -> 构建 ->

【讨论】:

  • 谢谢,但这也没有解决问题。仍然没有命中断点。好的,我不能使用“首选 32 位”,因为应用程序需要 64 位。您在 c++/clii projectß 中使用了哪些调试器设置
  • 您可以取消标记“首选 32 位”。然后选择“x64”作为VS的“Solution Platforms”,然后运行你的应用程序。
【解决方案2】:

教程:在同一个调试会话中调试 C# 和 C++

Visual Studio 允许您在调试会话中启用多个调试器类型,这称为混合模式调试。在本教程中,您将学习在单个调试会话中调试托管代码和本机代码。

可能是您在该步骤中遗漏了某些内容。根据您的问题,请点击以下链接。

Debug configuration and x86 or x64 platform

【讨论】:

  • 谢谢,我知道这个教程,但它的用例不一样,因为这个示例中没有管理 c++ dll。我有一个托管 (/cli) c++ dll,因为我需要 c# 中的类。
猜你喜欢
  • 1970-01-01
  • 2013-07-16
  • 2018-03-19
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 2021-03-22
  • 2013-03-09
  • 1970-01-01
相关资源
最近更新 更多