从 C# 调试 C++ cli - C++ 断点未命中

问题描述 投票:0回答:2

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

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

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

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

我已经尝试了很多设置:

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

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

让我感到奇怪的是,c# 代码中的 c++ 类成员上的“转到定义”只会带来从元数据生成的类定义,而不会转到源代码。

有什么想法吗?

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

c# c++ .net debugging managed
2个回答
3
投票

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

  1. 确保您的 VS 解决方案配置处于调试模式。

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

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

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

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

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

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

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

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

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

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

项目属性->构建->


0
投票

VS2022 的更新。 必须启用“启用本机调试”。在VS2022中你可以在项目设置、调试/常规、打开lauch配置文件中找到它。

© www.soinside.com 2019 - 2024. All rights reserved.