Sto eseguendo il debug di un componente di Windows e desidero visualizzare tutte le funzioni di una particolare dll chiamate (anche nell'esatto ordine sono chiamati). Posso farlo collegando il componente a windbg e impostando i breakpoint su tutte le funzioni esportate (bm *module_name!*
) del dll in questione.Come impostare i punti di interruzione in windbg che non interrompe l'esecuzione del programma registra solo la funzione denominata
Funziona come previsto. Ogni volta che una funzione esportata di quella dll viene chiamata windbg, interrompe l'esecuzione e stampa sullo schermo le informazioni sul punto di interruzione che viene colpito. Dopo di che posso riprendere manualmente l'esecuzione premendo F5 o dando il comando go.
Il problema: Alcune funzioni della DLL devono tornare molto rapidamente (immediatamente) altrimenti il componente si blocca. In tal caso, il punto di interruzione provoca l'arresto anomalo del componente. Posso rimuovere il punto di interruzione in questione ma poi non ci sarebbe alcun registro di essere colpito.
Mi sono guardato intorno e ho scoperto che posso eseguire un comando ogni volta che viene colpito un punto di interruzione. bm module_name!func_name ".printf \"func_name\n\";gc"
Ma questo non è possibile per ogni funzione esportata. La dll ha circa 100 funzioni esportate.
Cosa posso fare per registrare (sullo schermo stesso) ogni funzione esportata che viene colpita (anche il numero di punto di interruzione dovrebbe essere fatto se non si può fare nient'altro). C'è un nome di variabile che posso usare nel comando printf
che può stampare il nome della funzione (o il numero di breakpoint se non il nome della funzione)?
Qual è il problema qui, si desidera un elenco delle funzioni di essere colpito e poi continuare, ma rimuovere i punti di interruzione o stai voler appena uscita la prima linea dello stack di chiamate? Potresti provare '.kframes = 1; bm * nome_modulo! *" Kb; gc "', questo imposterà lo stack di chiamate a 1, per ogni punto di interruzione verrà eseguito il dump della prima chiamata che sarà la funzione colpita ma tu ottenere un sacco di colpi anche se – EdChum
'Manca l'espressione numerica da '= 1; bm * nome_modulo! *" kb; gc "'' – tMJ
FTR: Non voglio rimuovere il punto di interruzione. – tMJ