たとえば、1つのモジュールにいくつかの異なる構築ブロックがある場合に、単一のディレクトリ内のソースファイルを再帰的に検索するためにUNIXのgdbに言及するにはどうすればよいですか。 aはb、c、dの親ディレクトリです。ここで、b、c、dは子ディレクトリです。ソースファイルはb、c、bで配布されます。すべてのソースファイルが(親ディレクトリ)にあることをgdbに伝える必要があります。どのgdbが参照として使用し、プログラムのデバッグ中にソースファイルを再帰的に検索します。
または、ディレクトリprog
のソースを使用してプログラムsrcdir
をデバッグするために、次のようなことを行うことができます。
gdb `find srcdir -type d -printf '-d %p '` prog
それはあなたの質問に対するより直接的な答えだと思います。実行可能ファイルにコンパイルディレクトリが含まれていない場合や、バージョン6.6以降のgdbがない場合にも役立ちます。
これに必要なのはコマンド setsubstitute-path です。
(gdb) set substitute-path /usr/src/include /mnt/include
ただし、gdbの最近のバージョン(6.6以降)でのみ使用できます。
(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.
私にとってディレクトリコマンドはうまくいきました。
ターゲットシステムのバイナリ、ライブラリ、ソースがあるトップレベルのディレクトリ(ターゲットsysroot)に入ったところです。そして、GDBは必要なものすべてを再帰的に見つけました。
こちらのスクリーンショットをご覧ください。
(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)