簡體   English   中英

如何中斷從 c# 互操作調用的 c++ 代碼

[英]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 文檔中有詳細說明,只需啟用混合模式調試

為托管呼叫應用程序啟用混合模式調試

  1. Select 解決方案資源管理器中的 C# 或 Visual Basic 項目和 select 屬性圖標,按 Alt+Enter,或右鍵單擊並選擇屬性。

  2. Select 調試選項卡,然后 select 啟用本機代碼調試。

  3. 關閉屬性頁面以保存更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM