0

我制作了一个 DLL,其中包含一个托管 C++ 类,该类包装了 C 库的一些功能。我有一个引用托管 C++ DLL 的 C# 测试项目。C#项目中开启了非托管调试,我在C++ DLL项目中设置了Debugger Type=Mixed。这是我所拥有的图表:

C# 控制台应用程序 -> 包装器 DLL -> 托管 C++ 类 -> 非托管 C++ 方法(在包装器 DLL 中实现)-> C 静态库

我在托管包装类和 DLL 中的非托管方法中都设置了断点。当我开始调试时,我的所有断点都保持红色。托管包装类中的断点会被命中,但非托管方法中的断点不会。奇怪的是,当我尝试进入任何非托管方法时,调试器“跳过”非托管 C++ 方法并直接进入 C 静态库中的函数。那时,调用堆栈显示 [External Code],我希望它显示我的非托管 C++ 方法。

关于这里可能发生的事情有什么想法吗?

4

3 回答 3

0

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

选择 EXE 并确保

在“附加到:”中选择了“托管”和“本机”

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

于 2012-04-27T10:13:54.783 回答
0

您确定要从正确的位置加载 dll 吗?您可以通过“模块”视图检查这一点。

于 2012-04-26T19:33:21.560 回答
0

在我的情况下(VS2015_SP1)我必须使用 Debugger-Option:
Debug->Options->General->Use native Compatibility Mode

于 2016-02-12T10:08:31.257 回答