2009-07-09 18 views
17

Wie erwähne ich gdb in Unix, um rekursiv nach Quelldateien in einem einzelnen Verzeichnis zu suchen zum Beispiel wenn es verschiedene Bausteine ​​in einem Modul gibt. a ist das übergeordnete Verzeichnis für b, c, d, wobei b, c, d untergeordnete Verzeichnisse sind. und Quelldateien sind in b, c, b verteilt. Ich muss nur zu Gdb erwähnen, dass alle Quelldateien in einem (übergeordnetes Verzeichnis) befinden. , die gdb als Referenz verwenden und rekursiv nach Quelldateien suchen wird, während Sie ein Programm debuggen.gdb Suche nach Quellverzeichnissen

Antwort

16

Oder Sie können für das Debuggen von Programm prog mit Quelle im Verzeichnis srcdir so etwas wie dies tun:

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

Ich denke, es ist eine direkte Antwort auf Ihre Frage. Auch nützlich, wenn Ihre ausführbare Datei die Kompilierungsverzeichnisse nicht enthält und/oder Sie die Version 6.6+ von gdb nicht haben.

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

Was Sie dafür brauchen, ist der Befehl set substitute-path.

Nur in den neuesten Versionen (6.6+) von gdb, obwohl.

+0

"Set-Verzeichnisse" können auch in den neuesten Versionen verwendet werden. – ernesto

+0

Es funktioniert auch unter Windows wie 'set substitute-path/home/me/project c: \\ Benutzer \\ me \ \ project'. –

+0

Wenn Sie die Core-Datei auf einem anderen Computer laden, ist der Quellpfad möglicherweise anders. Sie können nicht im Fall '$ gdb Programm corefile' oder '$ gdb -c corefile Programm' ersetzen. In diesem Fall sollten Sie '$ gdb program' ausführen und dann die Substitution' (gdb) setzen substitute-path/home/me/project/mein/neu/pfad' und eine Corefile '(gdb) Core-Datei Corefile laden. –