Il mio codice C# sta chiamando una funzione di libreria di terze parti non gestita tramite P/Invoke e la funzione non gestita sta avendo alcuni strani effetti collaterali. Voglio fare il debug e vedere cosa sta facendo.Passaggio a una chiamata P/Invoke in vista di disassemblaggio
Se eseguo il debug del mio codice C# e provo a "Esegui" la chiamata P/Invoke, viene invece eseguito il passaggio. Nessuna sorpresa lì - mi aspettavo questo; non ha il sorgente per questa DLL e non ho detto che stavo bene guardando la vista dello smontaggio.
Così ho spostato il debugger in vista del disassemblaggio (Debug> Windows> Disassembly). Ora vedo le singole istruzioni x86 nel mio codice JITted. Ancora una volta cerco di entrare nella chiamata P/Invoke. Anche in questo caso, invece, si arresta - anche se ho chiaramente detto di passare a un'istruzione CALL x86. Quanto è difficile entrare in una chiamata x86?
mio Googling finora mi ha mostrato un paio di opzioni che possono influenzare questo, e li ho già fissato:
- In Strumenti> Opzioni> Debugging> Generale, "Attiva Just My Code" è incontrollato.
- In Progetto> Proprietà> scheda Debug, "Abilita debug del codice non gestito" è selezionato.
Non va bene. Visual Studio si rifiuta ancora di intervenire.
Non ho un PDB per la DLL di terze parti, ma non dovrebbe essere importante. Non mi interessa il codice sorgente o le informazioni sui simboli. (Beh, in realtà sarebbero davvero carini, ma so già che non li otterrò.) Visual Studio può eseguire il debug di x86 (ecco cos'è la vista Disassemblaggio per) e tutto ciò che voglio fare è passo nel codice x86.
Cos'altro devo fare per ottenere VS per consentirmi di entrare nelle istruzioni x86 all'interno di una chiamata P/Invoke?
Hai mai capito questo? – Dennis
Sono passati alcuni anni da quando ho provato a farlo, ma come ricordo, no, non l'ho mai fatto funzionare. –