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
Spogliato significa nessun simbolo, giusto? –
l'equivalente per OS X è 'otool -Iv'. –
cosa cercare nell'output di otool -Iv? –