2009-07-09 18 views
17

cómo menciono a gdb en Unix para buscar archivos de código fuente dentro de un solo directorio recursivamente por ejemplo si hay bloques de construcción diferentes en un módulo. a es el directorio principal para b, c, d donde b, c, d son directorios secundarios. y los archivos fuente se distribuyen en b, c, b. solo tengo que mencionar a gdb que todos los archivos fuente se encuentran en un (directorio principal). que gdb usará como referencia y buscará los archivos fuente recursivamente mientras depura un programa.gdb buscando directorios de origen

Respuesta

16

O puede hacer algo como esto, para el programa de depuración prog con fuente en el directorio srcdir:

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

creo que es una respuesta más directa a su pregunta. También es útil si su archivo ejecutable no contiene los directorios de compilación y/o no tiene la versión 6.6+ de 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

Lo que necesita para esto es el comando set substitute-path.

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

Solo disponible en las versiones recientes (6.6+) de gdb, sin embargo.

+0

"establecer directorios" también se puede utilizar en las últimas versiones. – ernesto

+0

También funciona en Windows como 'establecer ruta-de-sustitución/inicio/me/proyecto c: \\ Usuarios \\ me \\ proyecto'. –

+0

Si carga el archivo core en otra máquina, su ruta de origen puede ser diferente. No se puede sustituir en caso de '$ gdb program corefile' o' $ gdb -c corefile programme'. En este caso, debe ejecutar '$ gdb program' y luego hacer que la sustitución' (gdb) establezca sustitute-path/home/me/project/my/new/path' y cargue un corefile '(gdb) core-file corefile'. –