Ho un'estensione di Visual Studio che si aggancia agli eventi di debug. Quando il debugger si arresta su una riga di codice, viene richiamata la mia chiamata IDebugEventCallback2
e riesco a trovare il nome file e il numero di riga in cui il debugger è stato arrestato tramite IDebugThread2::EnumFrameInfo
.In un'estensione di Visual Studio, ottenere l'intervallo di righe della funzione in cui viene arrestato il debugger
Mi piacerebbe conoscere l'intervallo di linee di codice sorgente che la funzione corrente si estende.
Spero sia possibile ricavare le informazioni necessarie dalle interfacce del debugger: il debugger deve conoscere l'intervallo di funzioni delle righe. Se ciò non è possibile, sono aperto a qualsiasi altro metodo. In un mondo ideale la soluzione funzionerebbe senza il sistema di progetto: molte persone, me compreso, utilizzano Visual Studio come debugger autonomo senza utilizzare il sistema di progetto. (Inoltre, io non posso contare su Roslyn - ha bisogno di lavorare nelle versioni esistenti di Visual Studio.)
Edit: metodo di utilizzo di FileCodeModel
funziona bene, a patto che il file è parte di un progetto di Carlos. Mi piacerebbe ancora sapere se esiste un metodo che non richiede il sistema di progetto.
Grazie, ma questo non funziona per me. 'GetSourceRange()' restituisce l'intervallo dell'istruzione corrente, non l'intero frame, e 'Seek()' restituisce 0x80004001 "Non implementato" dal debugger C++. (Non è il mio downvote, BTW.) (E grazie per il puntatore al tuo eccellente articolo CodeModel, che avevo già visto. :-)) – RichieHindle