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

时间:2011-08-19 16:00:57

标签: c# c++ visual-studio visual-studio-2010 debugging

我已经阅读了SO上提供的解决方案,但到目前为止还没有解决我的问题。我的启动项目是一个非托管的C ++项目(我们称之为TestWrapper)。目标是让TestWrapper调用托管C ++项目,然后调用我的C#项目。这工作正常,我没有遇到任何问题。

但是,我的C#代码中出现了异常。由于某种原因,断点不会被击中,实际的调试中断发生在ntdll.dll内。我试图右键单击C#项目并启用非托管调试,但这不能解决问题。如果有人能指出我的解决方案,我将非常感激。

我要继续并包含项目布局:

TestWrapper (unmanaged C++) -> ManagedWrapper (managed C++) -> MyCSharpProject (C#)

我有一种感觉,它在于调试的配置,但我知道甚至不知道从哪里开始看。

2 个答案:

答案 0 :(得分:7)

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

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

调试器设置甚至包含在Visual Studio中的DLL项目中有点误导。它对系统没有任何影响。

答案 1 :(得分:1)

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

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