2016-04-30 8 views
2

Ich habe einen kleinen C# -Bibliotheksprototyp erstellt, der eine Invoke-Funktion hat.Anfügen von Visual Studio-Debugger an eine Electron-Edge-App durch node.js

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); 
    } 
} 

Das Ergebnis der Funktion ist ein neues Objekt, das eine int in ihm hat. Ich habe in meiner node/electron/edge.js App bestätigt, dass die Daten erfolgreich von der C# -Dll an meine App übergeben werden. (dh der C# -Code und JavaScript arbeiten zusammen, wie ich es von ihnen erwarte.)

Da dies ein Prototyp für ein komplexeres System ist, würde ich gerne in der Lage sein, den Visual Studio Debugger an den Knoten (oder Elektron ?) Prozess, laden Sie die Debugging-Symboldatei für die C# -Dll und erlauben Sie mir, durch meine C# dll gemäß der Edge.js Dokumentation zu gehen (Siehe the github page here). Ich habe die C# -Dll und. Pdb-Datei in das Electron App-Verzeichnis kopiert.

So legte ich einen Haltepunkt in meiner C# -Klasse in Visual Studio und dann ging, um den Debugger an den Prozess "Managed" Node.exe anfügen. Das erste, was ich bemerkte, war, dass zwei node.exe-Prozesse ausgeführt wurden, von denen keiner die in der Dokumentation erwähnte "Managed" -Beschreibung hatte.

Ich habe versucht, zuerst an eine, dann die andere, aber konnte nicht meinen Breakpoint nach meinem Edge.js Aufruf der C# DLL-Funktion getroffen werden. Ich habe die Debug-> Windows-> Module überprüft und festgestellt, dass keine Module geladen werden. Frustriert habe ich den Debugger an den Elektronenprozess angeschlossen (der die "Managed" -Beschreibung hat) und meine C# -Dll erschien plötzlich mit Symbolen, die auf der Debug-> Windows-> Modules-Seite geladen wurden! Leider wurde mein Haltepunkt immer noch nicht getroffen.

Weiß jemand, ob es eine Möglichkeit gibt, den Debugger in Visual Studio tatsächlich an die Knoten-/Elektronen-App anzuhängen und ein detailliertes Debugging in der zugehörigen C# -Dll zu ermöglichen?

Antwort

3

Ok, ich habe es herausgefunden. Es laufen auch drei electron.exe-Prozesse. Ich habe den Debug-> Windows-> Module-Viewer in Visual Studio geöffnet und dann meine Elektron/Edge/Node-App ausgeführt. Unter Verwendung der Debugging-Tools dort, legte ich einen Breakpoint vor dem Funktionsaufruf an meine C# DLL und lief es. Es hielt am Haltepunkt an. Ich habe dann den Debugger an den ersten electron.exe-Prozess angehängt und meinen Breakpoint in der C# -Klasse gesetzt. Ich bin dann über meinen Anruf in die C# -Bibliothek gegangen. Ich wiederholte den Vorgang für jeden electron.exe-Prozess. Der electron.exe-Prozess, der die "Verwaltete" Beschreibung hat, funktionierte und ich war in der Lage, meinen Haltepunkt in der C# -Dll zu treffen und durch den Code zu gehen! Jedes Mal, wenn Sie den Anruf von der Elektronen-App zum C# -Code durchlaufen, konnte ich sehen, wie meine Debugging-Symbole in Visual Studio im Modul-Viewer geladen wurden.

BEARBEITEN Durch weitere Verwendung und Tests erscheint der "verwaltete" Elektronenprozess erst, wenn die Elektronen-Kanten-Funktion in Javascript aufgerufen wird. Wenn Sie also den "Managed" -Elektronenprozess nicht sehen, stellen Sie sicher, dass Ihr Haltepunkt nach diesem Aufruf irgendwo eingestellt ist.

Verwandte Themen