Desidero impostare una condizione su un breakpoint gdb per interrompere solo se un determinato nome di funzione viene visualizzato nel backtrace. Qual'è il miglior modo per farlo?Interruzione GDB se il frame è in backtrace
risposta
Non sono sicuro di come fare esattamente ciò che si richiede, ma una possibile soluzione alternativa, se si ha accesso al codice sorgente della funzione rilevante, è impostare una variabile booleana globale su true
all'inizio della funzione e impostarlo su false
appena prima che la funzione esca. Quindi è possibile impostare un punto di interruzione condizionale (utilizzando il comando condition
) per interrompere solo quando questa variabile booleana è true
.
Questo è quello che ho finito, ma mi piacerebbe sapere come per farlo senza ricompilare. – Chazz
Una soluzione più semplice rispetto allo scripting Python utilizza uno temporary breakpoint.
Ecco come si presenta:
b ParentFunction
command 1
tb FunctionImInterestedIn
c
end
Ogni volta che si rompe in ParentFunction
, potrai impostare un punto di interruzione di una volta sulla funzione si sta effettivamente interessati, poi continuate in esecuzione (presumibilmente fino a colpire quel punto di rottura).
Dal momento che ti rompere esattamente una volta su FunctionImInterestedIn
, questo non funzionerà se FunctionImInterestedIn
viene chiamato più volte nel contesto di ParentFunction
e si vuole rompere ad ogni invocazione.
alternativa alla risposta di rix0rrr:
b main
commands
set $inParentFunction = 0
c
end
b ParentFunction
commands
set $inParentFunction = 1
c
end
b FunctionImInterestedIn if ($inParentFunction)
- 1. backtrace gdb senza input dell'utente?
- 2. Come interpretare gli indirizzi backtrace per il debug con GDB
- 3. Solo punti interrogativi in backtrace segnalati da gdb su ARM
- 4. È possibile utilizzare gdb per eseguire il backtrace quando vengono rilevate eccezioni?
- 5. GDB stack frame danneggiato - Come eseguire il debug?
- 6. È possibile nominare un punto di interruzione in GDB?
- 7. Automatizza GDB per stampare lo stack frame in un punto di interruzione particolare
- 8. Interruzione condizionale GDB su parametro funzione
- 9. Interruzione GDB su chiamata funzione oggetto
- 10. pausa gdb senza punto di interruzione
- 11. backtrace di SIGSEGV
- 12. gdb - Evita di perdere il backtrace in una situazione di catch/rethrow
- 13. Imposta punto di interruzione su ogni riga in GDB
- 14. Come posso esaminare il frame dello stack con GDB?
- 15. gdb: applica "successivo" al frame selezionato anziché al frame più interno
- 16. Interruzione dell'istruzione con codice operativo specifico in gdb
- 17. Impostazione di un punto di interruzione in GDB
- 18. Automatizza gdb: mostra il backtrace ad ogni chiamata alla funzione puts
- 19. Abilita punto di interruzione B se il punto di interruzione A è stato colpito
- 20. GDB: rompere se variabile valore uguale
- 21. gdb che non raggiunge i punti di interruzione
- 22. Punto di interruzione C++ GDB per funzioni membro
- 23. Punto di interruzione condizionale GDB su tipi arbitrari
- 24. GDB: interruzione su func1 solo se l'interruzione precedente era su func2
- 25. Come eseguire gdb-many-windows nel nuovo frame?
- 26. gdb: interruzione nella libreria condivisa caricata da python
- 27. Ottenere gdb per salvare un elenco di punti di interruzione?
- 28. gdb non si ferma al punto di interruzione
- 29. gdb: imposta un punto di interruzione per un gestore SIGBUS
- 30. Ottieni lo stack backtrace di un processo in esecuzione
Eventuali duplicati di [? C'è un modo per impostare un punto di interruzione in gdb, che è subordinato al stack di chiamate] (http://stackoverflow.com/questions/5336403/is-there-any-way-to-set-a-breakpoint-in-gdb-that-is-condizioned-on-the-call-stac) –