我有一个引用 C++(托管、cli、64)库 vcxproj 的 c# win-exe-64 项目的解决方案。使用 Visual Studio 16.10.3.
一切正常,我可以在 c# 中使用 c++ 中的类。
问题是调试,单步执行c++代码不起作用,并且c++代码中的断点也没有命中。 C++ 中的断点显示“当前不会命中断点。尚未为此文档加载任何符号。”
在 ide 中,当我检查“模块”窗口时,它显示:“已加载此特定 dll 的符号”。在“进程”窗口中,它指示“调试:托管 (.NET 4.x)、本机”
我已经尝试了很多设置:
但是没有任何帮助,只是没有命中断点。
让我感到奇怪的是,c# 代码中的 c++ 类成员上的“转到定义”只会带来从元数据生成的类定义,而不会转到源代码。
有什么想法吗?
更新:屏幕截图显示从 exe 文件夹加载的模块窗口、dll 和 pdb。右侧窗口主进程 c# exe 调用左侧窗口中的 c++ dll。
有几种可能的解决方案。在这里我提到其中一些我遇到过的。
确保您的 VS 解决方案配置处于调试模式。
删除所有以前的调试点。 (调试->删除所有断点)
从 VS 中卸载项目。 (或关闭VS)
从文件资源管理器中删除所有以前的 bin、obj、x64/x84 文件夹。
打开VS并在VS中加载项目。
清理项目 -> 设置调试指针 -> 构建 -> 运行
调试 -> 选项 -> 常规 -> 删除选项“仅启用我的代码”的复选标记
(如果第 1 点和第 2 点足够注意,在某些情况下它也适用)
当我遇到类似问题时,我按照第1点和第2点解决了它。
为了您的方便,我给出了我的可行 VS 的屏幕截图。
VS 调试 -> 选项 -> 常规 ->
项目属性->构建->
VS2022 的更新。 必须启用“启用本机调试”。在VS2022中你可以在项目设置、调试/常规、打开lauch配置文件中找到它。