使用本机C ++,托管c ++ cli和c#解决方案在混合模式下进行调试

我有一个multithreading项目正在进行中,启动项目设置为运行我的UI的ac #project。 然后有一系列基础c ++本机项目,它们通过托管C ++ / CLI项目连接到C#。 我在c#启动项目中启用了“启用非托管调试”,当我尝试调试本机代码时,我能够达到我设置的断点。 但是,在我尝试再次运行并尝试再次达到断点之后,它会挂起。 例如,如果我有一个循环,我尝试在每次迭代中触及它,在第二次迭代后程序挂起并且我必须强制退出。 我在Visual Studio 2010中工作。调试开始certificate在这个速度下不太有用,有没有办法排除这个问题?

当我想调试本机代码以及C ++ / CLI时,我会做以下事情:

  1. 在C#应用程序中,选中“构建”选项卡中的“ Allow unsafe code和“项目属性的调试”选项卡中的“ Enable unmanaged code debugging
  2. 对于C ++ / CLI dll项目,在属性的“调试”选项卡中,将“调试器类型”设置为“ Mixed

我们在调试复杂的混合代码应用程序时也遇到了问题,并发现Visual Studio在这些情况下并不可靠。 我的建议是:

  • 如果您正在尝试调试一段本机代码,请尝试使用本机项目作为调试器启动应用程序。 在项目设置下,“调试”选项卡将“调试器类型”设置为“混合”,对于我们这有时帮助(例如,本机项目可以是DLL,只需将主Exe设置为项目设置中的调试目标);

  • 使用WinDbg,您可以更加可靠地调试托管/非托管混合代码应用程序;

当我尝试从托管进入非托管代码时,我遇到了同样的问题,所以相反,我摆脱了托管端的所有断点并执行了以下操作:

1)通过File-> Open-> File(即我的source.cpp)打开未管理的源文件

2)在那里设置一个断点

3)启动托管代码调试(播放按钮)

它应该直接打破你的未托管代码…至少它对我有用…