【发布时间】: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