Mein C# -Code ruft eine nicht verwaltete Bibliotheksfunktion von Drittanbietern über P/Invoke, und die nicht verwaltete Funktion hat einige seltsame Nebenwirkungen. Ich möchte es debuggen und sehen, was es macht.In einen P/Invoke-Aufruf in Disassembly-Ansicht treten
Wenn ich meinen C# -Code debugge und versuche, den P/Invoke-Anruf zu "betreten", geht er stattdessen über. Keine Überraschung dort - das habe ich erwartet; Es hat nicht die Quelle für diese DLL, und ich habe es nicht gesagt, ich war in Ordnung mit der Demontageansicht.
So habe ich den Debugger zu Disassembly Ansicht wechseln (Debug> Windows> Disassembly). Jetzt sehe ich die einzelnen x86-Anweisungen in meinem JITted-Code. Wieder versuche ich in den P/Invoke-Aufruf zu treten. Wieder geht es stattdessen über - obwohl ich es klar gesagt habe, in einen x86 CALL-Befehl zu treten. Wie schwer ist es, in einen x86 CALL zu treten?
Mein googeln so hat mich weit gezeigt, ein paar Optionen, die diese beeinflussen können, und ich habe sie bereits festgelegt:
- In Extras> Optionen> Debuggen> Allgemein „Mein-Code aktivieren Sie einfach“ ist deaktiviert.
- In Projekt> Eigenschaften> Registerkarte Debuggen, "Enable unmanaged code debugging" aktiviert ist.
Nicht gut. Visual Studio weigert sich immer noch, einzutreten.
Ich habe keine PDB für die DLL von Dritt-Anbieter, aber das sollte keine Rolle spielen. Ich interessiere mich nicht für Quellcode oder Symbolinformationen. (Nun, eigentlich wären sie wirklich nett, aber ich weiß bereits, dass ich sie nicht bekommen werde.) Visual Studio kann x86-Debugging durchführen (das ist die Disassembly-Ansicht für), und alles, was ich tun möchte, ist Schritt in den x86-Code.
Was muss ich noch tun, um VS dazu zu bringen, dass ich in einem P/Invoke-Anruf in die x86-Anweisungen einsteigen kann?
Haben Sie das jemals herausgefunden? – Dennis
Es ist ein paar Jahre her, seit ich das versucht habe, aber soweit ich mich erinnere, nein, ich habe es nie zur Arbeit gebracht. –