[英]How to break in c++ code called from c# interop
使用 Visual Studio 2019。從 c# 調用 c 函數很常見,但是當出現運行時錯誤時,我會得到一個彈出窗口 window:
然而,我想實際進入 c++ 代碼,以便我可以對其進行調試,特別是查看調用堆棧、觀察局部變量、添加斷點等。
如何做到這一點?
如果需要演示項目: https://github.com/mprevot/InteropDemo
我打電話給 c function 旨在失敗:
#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# 調用這樣的 function:
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 文檔中有詳細說明,只需啟用混合模式調試:
為托管呼叫應用程序啟用混合模式調試
Select 解決方案資源管理器中的 C# 或 Visual Basic 項目和 select 屬性圖標,按 Alt+Enter,或右鍵單擊並選擇屬性。
Select 調試選項卡,然后 select 啟用本機代碼調試。
關閉屬性頁面以保存更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.