从非托管C++调用托管.NET代码的调试

3
我已经阅读了SO上提供的解决方案,但目前为止还没有解决我的问题。我的启动项目是一个非托管C++项目(我们将其称为TestWrapper)。目标是让TestWrapper调用托管C++项目,然后调用我的C#项目。这个工作得很好,我也没有运行时出现任何问题。
然而,我的C#代码中一直出现异常。由于某些原因,断点没有被命中,实际的调试中断发生在ntdll.dll内部。我尝试右键单击C#项目并启用非托管调试,但这并没有解决问题。如果有人能指引我找到解决方案,我将不胜感激。
我会包含项目布局:
TestWrapper (unmanaged C++) -> ManagedWrapper (managed C++) -> MyCSharpProject (C#)

我感觉问题在于调试的配置,但我对此不够了解,甚至都不知道该从哪里开始查找。

2个回答

7

调试器必须在启动时决定是否调试本机代码、托管代码或本机 + 托管代码。因此,您必须更改启动项目的调试器设置,而不是您遇到问题的 DLL。请尝试以下步骤:

  • 右键单击项目,选择“属性”
  • 导航到“配置属性” ->“调试”
  • 将调试器类型切换为混合模式

在 Visual Studio 的 DLL 项目中包含调试器设置有点误导人,并没有对系统产生任何影响。


1

一个想法可能是从C#环境中调试应用程序。如果您正在使用Express,可以通过在csproj文件中添加几行来设置启动应用程序。

<StartAction>Program</StartAction>
<StartProgram>..path to your app..</StartProgram>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接