簡體   English   中英

通過node.js將Visual Studio調試器附加到電子邊緣應用程序

[英]Attach Visual Studio debugger to an electron-edge app through node.js

我創建了一個具有Invoke函數的小型C#庫原型。

public class TestClass
{
    public async Task<object> Invoke(dynamic input)
    {
        Dictionary<Type, IReport> reports = new Dictionary<Type, IReport>
        {
            {typeof (LevelOne), new LevelOneReport()},
            {typeof (LevelTwo), new LevelTwoReport()}
        };

        ILevel toTestLevel1 = new LevelOne(1);
        ILevel toTestLevel2 = new LevelTwo(2);

        IReport report = reports[toTestLevel2.GetType()];
        return report.Generate(toTestLevel2);
    }
}

該函數的結果是其中包含int的新對象。 我已經在我的node / electron / edge.js應用程序中確認數據已成功從C#dll傳遞到我的應用程序。 (即C#代碼和JavaScript正按我期望的方式協同工作。)

由於這是更復雜系統的原型,因此我希望能夠將Visual Studio調試器附加到節點(或電子?)進程,讓它加載C#dll的調試符號文件,並允許我逐步進行操作。根據Edge.js文檔創建我的C#dll(請參閱github頁面 )。 我已經將C#dll和.pdb文件復制到了電子應用目錄。

因此,我在Visual Studio的C#類中設置了一個斷點,然后將調試器附加到“ Managed” node.exe進程中。 我注意到的第一件事是有兩個node.exe進程正在運行,兩個進程都沒有文檔中提到的“托管”描述。

我嘗試先附加一個,然后附加另一個,但是在我的C#dll函數的edge.js調用后無法擊中斷點。 我檢查了Debug-> Windows-> Modules,發現實際上沒有模塊被加載。 沮喪的是,我將調試器附加到電子進程(具有“ Managed”描述),並且我的C#dll突然出現,並在Debug-> Windows-> Modules頁面中加載了符號! las,我的斷點仍然沒有被擊中。

有誰知道是否有一種方法可以使Visual Studio中的調試器實際附加到節點/電子應用程序,並允許在關聯的C#dll中進行詳細調試?

好的,我知道了。 也有三個Electronic.exe進程正在運行。 我在Visual Studio中將“調試”->“ Windows”->“模塊”查看器保持打開狀態,然后運行了electronic / edge / node應用程序。 使用那里的調試工具,我在對C#dll的函數調用之前放置了一個斷點並運行它。 它在斷點處停止。 然后,我將調試器附加到第一個electronic.exe進程,並在C#類中設置斷點。 然后,我結束了對C#庫的調用。 我為每個electronic.exe進程重復了該過程。 確實具有“托管”描述的electron.exe進程正常工作,我能夠在C#dll中命中斷點,並逐步執行代碼! 每次您逐步完成從電子應用程序到C#代碼的調用時,都可以在Visual Studio中的“模塊”查看器中看到它加載了調試符號。

編輯通過進一步的使用和測試,直到在javascript中調用了電子邊緣require函數后,“托管”電子過程才會出現。 因此,如果看不到“ Managed”電子過程,請確保在此調用之后將斷點設置在某個位置。

暫無
暫無

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

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