2009-07-09 7 views
17

comment puis-je mentionner à gdb dans unix pour rechercher des fichiers source dans un seul répertoire récursivement par exemple s'il y a quelques blocs de construction différents dans un module. a est le répertoire parent de b, c, d où b, c, d sont des répertoires enfants. et les fichiers sources sont distribués en b, c, b. Je dois juste mentionner à gdb que tous les fichiers source se trouvent dans un (répertoire parent). que gdb utilisera comme référence et recherchera récursivement les fichiers source lors du débogage d'un programme.gdb recherche de répertoires source

Répondre

16

Ou vous pouvez faire quelque chose comme ça, pour le programme de débogage prog avec la source dans le répertoire srcdir:

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

Je pense qu'il est une réponse plus directe à votre question. Aussi utile si votre exécutable ne contient pas les répertoires de compilation et/ou si vous n'avez pas la version 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

Ce dont vous avez besoin est la commande set substitute-path.

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

Disponible uniquement dans les versions récentes (6.6+) de gdb.

+0

"Définir les répertoires" peut également être utilisé dans les dernières versions. – ernesto

+0

Il fonctionne également sous Windows comme 'set substte-path/home/moi/projet c: \\ Users \\ me \\ project'. –

+0

Si vous chargez le fichier core sur une autre machine, il est possible que votre chemin source soit différent. Vous ne pouvez pas remplacer dans le cas de '$ gdb program corefile' ou' $ gdb -c corefile program'. Dans ce cas, vous devez lancer '$ gdb program' et ensuite faire une substitution' (gdb) set substitut-chemin/home/moi/projet/mon/nouveau/chemin' et charger un corefile '(gdb) core-file corefile'. –

Questions connexes