Vorrei tracciare qualche codice in GIMP e quindi ho bisogno di GIMP con i simboli di debug abilitati. Non ricordo se li ho abilitati durante la compilazione. Come verificare che senza la ricompilazione del programma?Come verificare se il programma è stato compilato con i simboli di debug?
risposta
È possibile utilizzare file
e objdump
su Linux. In particolare, puoi vedere se il file dice "stripped" o "not stripped", e se objdump --syms
restituisce qualcosa di utile (per me, dice "no symbols" per una build regolare).
Quando si esegue il comando objdump --syms
, vedo molto di più di "senza simboli" in uscita (almeno, per gli oggetti kernel).
Per verificare se ci sono informazioni di debug all'interno dell'oggetto kernel, è possibile aggiungere quanto segue alla fine del comando objdump
: | grep debug
.
Se questa stringa viene trovata, si sa che l'oggetto kernel contiene informazioni di debug. In caso contrario, si tratta di un oggetto kernel "pulito".
Esempio di un modulo del kernel ho compilato senza informazioni di debug:
[email protected]:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug
Esempio di quello stesso modulo del kernel ho compilato con le informazioni di debug:
[email protected]:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug
00000000 l d .debug_frame 00000000 .debug_frame
00000000 l d .debug_info 00000000 .debug_info
00000000 l d .debug_abbrev 00000000 .debug_abbrev
00000000 l d .debug_loc 00000000 .debug_loc
00000000 l d .debug_aranges 00000000 .debug_aranges
00000000 l d .debug_ranges 00000000 .debug_ranges
00000000 l d .debug_line 00000000 .debug_line
00000000 l d .debug_str 00000000 .debug_str
00000010 l .debug_frame 00000000 $d
Come puoi vedere, la prima uscita non restituisce nulla, mentre la seconda uscita restituisce le linee con debug
in essa.
Nota: nel mio caso, il comando file
mi ha restituito "non rimosso" in sia nel caso sia nel caso di debug e non di debug. Tuttavia, la differenza di dimensioni dell'oggetto del kernel era notevole:
- ca. 16k senza informazioni di debug
- ca. 137k con informazioni di debug
Chiaramente, quest'ultima versione conteneva informazioni di debug all'interno.
La mia domanda: il comando file
è affidabile in questi casi? Da quello che ho vissuto, mi affido al comando objdump --syms ... | grep debug
.
Anche io ho avuto lo stesso problema con 'file'. Per me, 'objdump --syms' senza il bit' grep' produce molti risultati anche nella build non di debug, ma 'grep' aiuta a richiamare i simboli specifici di debug, quindi funziona per me. – patrickvacek
+ uno per cancellare la vaghezza nell'output 'file' – ADJ
- 1. Come eseguire il debug di un programma compilato con 'make'?
- 2. Come rilevare se un programma è stato compilato usando -threaded?
- 3. Verificare se il bytecode Java contiene simboli di debug
- 4. Come identificare se Swift è stato compilato con Ottimizzazione
- 5. Come scoprire se un assembly .NET è stato compilato con il flag TRACE o DEBUG
- 6. Determina se il file .class è stato compilato con le informazioni di debug?
- 7. Come posso verificare se il mio programma è compilato per processore a 32 o 64 bit?
- 8. verifica se un file binario è stato compilato con "-static"
- 9. Debug post-mortem di un programma compilato Mono AOT
- 10. Come verificare se HealthKit è stato autorizzato
- 11. Come verificare se WaitHandle è stato impostato?
- 12. Qualsiasi modo per determinare quando un programma .net è stato compilato/compilato
- 13. Come posso verificare lo stato del simbolo di debug con Eclipse?
- 14. Come verificare se object "isEmpty()" se Object.prototype è stato modificato?
- 15. Verificare se è stato definito un metodo
- 16. Come verificare se un assembly è stato creato utilizzando la configurazione di debug o release?
- 17. Come verificare la versione di Python con cui è stato compilato vim?
- 18. Come verificare se il metodo è stato chiamato da altri con la stessa classe di mockito
- 19. Come verificare se un modulo python è stato importato?
- 20. Come posso decodificare un programma Perl che è stato compilato con perlcc?
- 21. Come verificare se un programma è in esecuzione con il suo nome con Qt (C++)
- 22. Come posso dire, con qualcosa come objdump, se un file oggetto è stato compilato con -fPIC?
- 23. Come verificare lo stato di un programma in esecuzione
- 24. Come verificare se un programma è installato su sistema Windows
- 25. GDB dice "nessuna tabella dei simboli", ma nm mostra il file ha i simboli di debug
- 26. Programma di debug XQuery
- 27. Come verificare se uno scanner è stato chiuso
- 28. programmazione verificare se il calendario è stato reso
- 29. È possibile eseguire il debug di un assembly compilato?
- 30. Simboli di debug non caricati
Spogliato significa nessun simbolo, giusto? –
l'equivalente per OS X è 'otool -Iv'. –
cosa cercare nell'output di otool -Iv? –