Sotto Linux, posso utilizzare GDB per eseguire il debug di un processo attualmente in esecuzione?Posso utilizzare GDB per eseguire il debug di un processo in esecuzione?
risposta
Sì. Utilizzare il comando attach
. Controlla this link per ulteriori informazioni. Digitando help attach
ad una console GDB ha pronunciato la seguente:
(gdb) help attach
connettersi a un processo o di un file al di fuori del GDB. Questo comando si collega a un'altra destinazione, dello stesso tipo dell'ultimo comando "
target
" ("info files
" mostrerà lo stack di destinazione). Il comando può assumere come argomento un id di processo, un nome di processo (con un id di processo facoltativo come suffisso) o un file di dispositivo. Per un id di processo, è necessario disporre dell'autorizzazione per inviare al processo un segnale, e deve avere lo stesso uid effettivo del debugger. Quando si utilizza "attach
" per un processo esistente, il debugger trova il programma in esecuzione nel processo, guardando prima nella corrente di lavoro directory, o (se non trovato lì) utilizzando il percorso di ricerca file sorgente (vedi "directory
"comando). È inoltre possibile utilizzare il comando ""file
per specificare il programma e caricare la relativa tabella dei simboli.
NOTA: Si può avere difficoltà a collegare a un processo a causa di improved security in the Linux kernel - ad esempio il fissaggio al figlio di una conchiglia da un altro.
È probabile che sia necessario impostare /proc/sys/kernel/yama/ptrace_scope
in base alle proprie esigenze. Molti sistemi ora sono impostati su 1
o superiore.
The sysctl settings (writable only with CAP_SYS_PTRACE) are:
0 - classic ptrace permissions: a process can PTRACE_ATTACH to any other
process running under the same uid, as long as it is dumpable (i.e.
did not transition uids, start privileged, or have called
prctl(PR_SET_DUMPABLE...) already). Similarly, PTRACE_TRACEME is
unchanged.
1 - restricted ptrace: a process must have a predefined relationship
with the inferior it wants to call PTRACE_ATTACH on. By default,
this relationship is that of only its descendants when the above
classic criteria is also met. To change the relationship, an
inferior can call prctl(PR_SET_PTRACER, debugger, ...) to declare
an allowed debugger PID to call PTRACE_ATTACH on the inferior.
Using PTRACE_TRACEME is unchanged.
2 - admin-only attach: only processes with CAP_SYS_PTRACE may use ptrace
with PTRACE_ATTACH, or through children calling PTRACE_TRACEME.
3 - no attach: no processes may use ptrace with PTRACE_ATTACH nor via
PTRACE_TRACEME. Once set, this sysctl value cannot be changed.
Il comando da utilizzare è gdb attach pid
dove PID è l'ID di processo del processo che si desidera allegare al.
È possibile collegare a un processo in esecuzione con gdb -p PID
.
Sì, è possibile. Si supponga un processo è in esecuzione foo
...
ps -elf | grep foo look for the PID number gdb -a {PID number}
In quale distribuzione stai lavorando? Usando una versione recente di Fedora, 'gdb -a' stampa un errore "opzione -a è ambigua". –
l'argomento ufficiale è -p/- pid –
Sì. Si può fare:
gdb program_name program_pid
Una scorciatoia sarebbe (assumendo una sola istanza è in esecuzione):
gdb program_name `pidof program_name`
Non so cosa faccia, ma sicuramente non funziona per me. Dice che
Trovo che questo funzioni meglio poiché carica la tabella dei simboli oltre a collegarsi al processo. Va notato che 'nome_programma 'funziona se ci si trova nella stessa directory del file binario. Penso che un percorso per il binario funzionerebbe se ci si trova in una directory diversa. – KarateSnowMachine
ps -elf non sembra mostrare il PID. Mi consiglia di utilizzare invece:
ps -ld | grep foo
gdb -p PID
Se si desidera collegare un processo, questo processo deve avere lo stesso proprietario. La root è in grado di collegarsi a qualsiasi processo.
- 1. Debug di un demone in esecuzione utilizzando gdb
- 2. Debug di un processo Python in esecuzione
- 3. Come eseguire il debug usando gdb?
- 4. Come posso verificare un processo in esecuzione per sessione utente?
- 5. Android Studio: come eseguire il debug di un processo in esecuzione sul dispositivo Android?
- 6. Come usi gdb per eseguire il debug del tuo codice?
- 7. Come utilizzare CLR Profiler per eseguire il debug di un'app ASP.Net in esecuzione su IIS 7.5?
- 8. Utilizzo di Eclipse per eseguire il debug remoto con gdbserver
- 9. Visual Studio dispone di privilegi insufficienti per eseguire il debug di questo processo. Per eseguire il debug di questo processo, Visual Studio deve essere eseguito come amministratore
- 10. Come eseguire il debug di un processo figlio forked utilizzando CLion
- 11. Python REPL per un processo in esecuzione
- 12. Collegamento a un processo remoto per il debug
- 13. Test di javascript con Mocha: come posso utilizzare console.log per eseguire il debug di un test?
- 14. GDB stack frame danneggiato - Come eseguire il debug?
- 15. Debug qemu con gdb
- 16. Come posso utilizzare xdebug per eseguire il debug di un solo host virtuale?
- 17. Ottenere un percorso di un processo in esecuzione per nome
- 18. Determinazione del thread corretto per il debug in GDB
- 19. Ottieni lo stack backtrace di un processo in esecuzione
- 20. Come posso eseguire il debug di PHP in IIS?
- 21. Debug di un llvm con gdb
- 22. Come posso eseguire il collegamento e il debug di una stored procedure SQL Server in esecuzione?
- 23. Come posso eseguire il debug in un framework in Xcode?
- 24. Debug di bootloader con gdb in qemu
- 25. Come posso eseguire il debug di un trasformatore personalizzato
- 26. non può eseguire il debug Windows Service - "Connetti a processo"
- 27. Come posso collegare un debugger a un processo Perl in esecuzione?
- 28. gdb in esecuzione su un server Web
- 29. Come posso eseguire il debug di un'applicazione Chrome in modalità Kiosk in esecuzione?
- 30. Come posso utilizzare "watch" GDB?
Il collegamento è interrotto :(Dal mio punto di vista, mi piacciono le risposte come [questo] (http://stackoverflow.com/a/2702170/938111) da [J. Polfer] (http: // stackoverflow .com/users/40411/j-polfer). Cheers;) – olibre
Ho risolto il link. – Attie
funziona anche per un pid di un processo su un target remoto? – Bionix1441