Вопрос по gdb, debugging – GDB ищет исходные каталоги

17

Как я упоминаю GDB в Unix для поиска исходных файлов внутри одного каталога рекурсивно например если в одном модуле есть несколько разных строительных блоков. a является родительским каталогом для b, c, d, где b, c, d являются дочерними каталогами. и исходные файлы распространяются в b, c, b. Я просто должен упомянуть GDB, что все исходные файлы находятся в (родительский каталог). который GDB будет использовать в качестве ссылки и рекурсивно искать исходные файлы при отладке программы.

Ваш Ответ

4   ответа
16

prog с источником в каталогеsrcdir:

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

Я думаю, что это более прямой ответ на ваш вопрос. Также полезно, если ваш исполняемый файл не содержит каталогов компиляции и / или у вас нет версии 6.6+ 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.  
0

directory Команда сработала хорошо.

Я только что вошел в каталог верхнего уровня, где находятся целевые системные двоичные файлы, библиотеки и исходные файлы (целевой системный корень). И ГБД рекурсивно нашел все, что было необходимо.

Проверьте это, вот скриншот:

(gdb) list
705 /usr/src/debug/babeltrace/1.5.1-r0/git/converter/babeltrace.c: No such file or directory.
(gdb) directory /home/egradra/SDK_AXM5612/sysroots/armv7a-vfp-neon-wrs-linux-gnueabi
Source directories searched: /home/egradra/SDK_AXM5612/sysroots/armv7a-vfp-neon-wrs-linux-gnueabi:$cdir:$cwd
(gdb) list
705             goto end;
706         }
707     }
708     ret = 0;
709 
710 end:
711     bt_ctf_iter_destroy(iter);
712 error_iter:
713     bt_iter_free_pos(begin_pos);
714     bt_iter_free_pos(end_pos);
(gdb) 
24

установить путь замены.

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

Впрочем, доступно только в последних версиях (6.6+) GDB.

& quot; установить каталоги & quot; также может использоваться в последних версиях.
Если вы загрузите основной файл на другом компьютере, ваш исходный путь может отличаться. Вы не можете заменить в случае$ gdb program corefile или же$ gdb -c corefile program, В этом случае вы должны запустить$ gdb program а затем сделать замену(gdb) set substitute-path /home/me/project /my/new/path и загрузить corefile(gdb) core-file corefile.
Ссылка мертва
Это также работает на Windows, какset substitute-path /home/me/project c:\\Users\\me\\project.

Похожие вопросы