为什么我没有在托管 C++ DLL 中命中一些断点(即使它们在调试时呈稳定红色)

本文关键字:调试 红色 C++ 为什么 DLL 断点 | 更新日期: 2023-09-27 18:32:33

我创建了一个DLL,其中包含一个托管C++类,该类包装了C库的某些功能。我有一个引用托管C++ DLL 的 C# 测试项目。 在 C# 项目中启用了非托管调试,并且我在 C++ DLL 项目中设置了调试器类型=混合。 这是我得到的一种图表:

C# 控制台应用 -> 包装器 DLL -> 托管C++类 ->

非托管C++方法(在包装器 DLL 中实现(-> C 静态库

我在托管包装类和 DLL 中的非托管方法中都设置了断点。 当我开始调试时,我的所有断点都保持稳定红色。 命中托管包装类中的断点,但未命中非托管方法中的断点。 奇怪的是,当我尝试单步执行任何非托管方法时,调试器会"跳过"非托管C++方法,直接进入 C 静态库中的函数。 此时,调用堆栈显示 [外部代码],我希望它显示我的非托管C++方法。

关于这里可能发生的事情的任何想法?

为什么我没有在托管 C++ DLL 中命中一些断点(即使它们在调试时呈稳定红色)

您确定从正确的位置加载 dll 吗?您可以通过"模块"视图进行检查。

尝试运行 EXE,然后转到调试 |附加到 VS 中的进程。

选择 EXE 并确保

在"附加到:"中选择"托管"和"本机">

这就是我以前使用过的,似乎工作正常......

在我的情况下(VS2015_SP1(,我必须使用调试器选项:
调试>选项>常规>使用本机兼容模式