使用Visual Studio2019。从C#调用c函数很常见,但是当发生运行时错误时,我将得到一个弹出窗口,如下所示:
但是我想真正地闯入c++代码,以便我可以对其进行调试,特别是查看调用堆栈,观察局部变量,添加断点等。
如何实现呢?
如果需要演示项目:
https://github.com/mprevot/InteropDemo
我正在调用旨在失败的c函数:
#ifndef Pinvoke
#define Pinvoke extern "C" __declspec(dllexport)
#endif
std::wstring ToString(int number)
{
std::wstringstream s;
s << "got number " << number;
return s.str();
}
Pinvoke auto GetNumbers() -> void
{
std::vector<int> array0{11,12,13,14};
std::vector<int> array1{21,22,23};
for (size_t i = 0; i < 4; i++)
ToString(array0[i]);
for (size_t i = 0; i < 4; i++)
ToString(array1[i]);
}
我从C#调用这样的函数:internal static class NativeLibCall
{
public const string _dll = "NativeLib.dll";
[DllImport(_dll, CallingConvention = CallingConvention.StdCall)]
internal static extern void GetNumbers();
}
public class NativeLibInterop
{
public void GetNumbers() => NativeLibCall.GetNumbers();
}
最佳答案
正如Kevin Gosse所建议的,并在MSFT documentation中进行了详细介绍,只需启用混合模式调试即可: