2009-07-09 18 views
17

Come faccio a parlare di gdb in unix per cercare i file di origine all'interno di una singola directory in modo ricorsivo per esempio se ci sono alcuni blocchi buiding in un modulo. a è la directory padre per b, c, d dove b, c, d sono directory secondarie. e i file sorgente sono distribuiti in b, c, b. devo solo menzionare a gdb che tutti i file sorgente si trovano in una (directory madre). quale gdb userà come riferimento e cercherà i file sorgente in modo ricorsivo durante il debug di un programma.gdb alla ricerca di directory di origine

risposta

16

Oppure si può fare qualcosa di simile, per il debug di programmi prog con la fonte nella directory srcdir:

gdb `find srcdir -type d -printf '-d %p '` prog 

penso che sia una risposta più diretta alla sua domanda. Utile anche se il tuo eseguibile non contiene le directory di compilazione e/o non hai la versione 6.6+ di gdb.

5
(gdb) help files 
Specifying and examining files. 

List of commands: 

add-shared-symbol-files -- Load the symbols from shared objects in the dynamic linkers link map 
add-symbol-file -- Load symbols from FILE 
add-symbol-file-from-memory -- Load the symbols out of memory from a dynamically loaded object file 
cd -- Set working directory to DIR for debugger and program being debugged 
core-file -- Use FILE as core dump for examining memory and registers 
directory -- Add directory DIR to beginning of search path for source files 
edit -- Edit specified file or function 
exec-file -- Use FILE as program for getting contents of pure memory 
file -- Use FILE as program to be debugged 
forward-search -- Search for regular expression (see regex(3)) from last line listed 
generate-core-file -- Save a core file with the current state of the debugged process 

(gdb) help directory 

Add directory DIR to beginning of search path for source files. 
Forget cached info on source file locations and line positions. 
DIR can also be $cwd for the current working directory, or $cdir for the 
directory in which the source file was compiled into object code. 
With no argument, reset the search path to $cdir:$cwd, the default. 
21

Quello che ti serve è il comando set substitute-path.

(gdb) set substitute-path /usr/src/include /mnt/include 

Disponibile solo nelle versioni recenti (6,6+) di gdb.

+0

"set directory" può essere utilizzato anche nelle ultime versioni. – ernesto

+0

Funziona anche su Windows come 'set sostituto-percorso/home/me/progetto c: \\ Utenti \\ me \\ progetto'. –

+0

Se si carica il file principale su un'altra macchina, il percorso di origine potrebbe essere diverso. Non puoi sostituire nel caso in cui '$ gdb program corefile' o' $ gdb -c corefile program'. In questo caso dovresti eseguire '$ gdb program' e quindi effettuare la sostituzione' (gdb) set substitute-path/home/me/project/my/new/path' e caricare un corefile '(gdb) core-file corefile'. –

Problemi correlati