Ich versuche, eine C# -Dll aus einer nativen C++ - Programmdatei zu debuggen. Ich habe ein C# COM-Objekt, das über IDispatch geladen und aus systemeigenem Code ausgeführt wird. Alles ist in Debug eingebaut, sowohl C# als auch C++ Code. Während ich den ganzen C++ - Code sehen kann und alle C++ - DLLs ihre Symbole geladen haben und zum Debuggen verfügbar sind, bricht der C# -Code ab."übersprungen Laden Symbole für Ngen-Binärdatei" für C# dll
Was ich sehe, ist, dass die C# dlls alle lehnen ihre Symbol pdbs laden, Berichterstattung "übersprungen Laden Symbole für Ngen binär" im Modulfenster.
Übrigens bin ich Debuggen der C# -Lösung hier, ich habe die native ausführbare Datei als 'Start externes Programm' in den Debug-Einstellungen des COM-Projekts festgelegt.
Jetzt kann ich die ausführbare C++ starten und dann anhängen, und dann funktioniert alles wie ich erwarte - die Symbole laden und ich kann Haltepunkte in der C# setzen.
Dies verwendet Visual Studio 2013u4. Gibt es eine Einstellung, um Debugging im gemischten Modus zu aktivieren? Ein Nachteil ist, dass der native Code mit VS2010 erstellt wurde.
Hier ist das Modul-Fenster - alle PDBS beachten und DLLs werden in einem einzigen Verzeichnis, können Sie die C++ DLLs geladen, aber nicht die C# Einsen.
Hier ist der Module Fenster - beachten Sie den dritten Eintrag für die eVCOM dll (das COM-Objekt), die ich nehme an der Eintrag Debugging ermöglicht.
Es gibt nichts von Interesse in der Ausgabe Fenster, wenn es zum Laden der COM-DLL kommt, sehe ich Folgendes (im Fall der Anfügen an den laufenden Prozess, der andere hat nur 2 Loaded Linien statt 3).
'Explorer.exe' (Win32): Loaded 'C:\Dev\...\lib\debug\EvCom.dll'.
'Explorer.exe' (Win32): Loaded 'C:\Dev\...\lib\debug\EvCom.dll'.
'Explorer.exe' (Win32): Unloaded 'C:\...\lib\debug\EvCom.dll'
'Explorer.exe' (Win32): Loaded 'C:\Dev\...\lib\debug\EvCom.dll'.
Eine Sache von Interesse - Ich habe den „Use Managed-Kompatibilitätsmodus“ in den Debug-Einstellungen und dachte, dass es immer noch nicht meine Symbole nicht geladen werden, wenn das Debuggen starten, es zeigt nur 1 Eintrag in der Liste Module. Dieses Mal sagt "Keine nativen Symbole in der Symboldatei" für die C# dlls.
Es scheint, als ob das Problem nicht in der Lage ist, den Debugger-Typ in VS2013 (oder 2012) auszuwählen. This connect article schlägt seine "mit Absicht" mit einigen Problemumgehungen vor.
Rechtsklick auf Ihr C++ Projekt, Eigenschaften, Debugging, Debugger Type = Mixed. –
Es gibt kein C++ - Projekt, ich debugge mein C# -Projekt in VS2013, und es gibt keine solche Einstellung dort, das native Projekt wird extern erstellt und nicht innerhalb VS als Projekt referenziert. – gbjbaanb
"Ich kann den ganzen C++ Code sehen" ist ... seltsam dann. Sie müssen bereits Debugging im gemischten Modus aktiviert haben, nur um C++ - Code zu sehen. Konzentriere dich auf die seltsame Warnung vor ngen Binärdateien, das ist nicht normal. Du solltest niemals Code debuggen. Führen Sie ngen/uninstall aus, um es zu entfernen. –