【问题标题】:gdb dir command and source path -- what are $cdir, $cwd?gdb dir 命令和源路径 -- 什么是 $cdir、$cwd?
【发布时间】:2021-08-22 08:26:31
【问题描述】:

当我做(gdb) dir n m

输出如下

 Source directories searched: /home/fawad/Desktop/linux-debug/linux-5.12.6/n:/home/fawad/Desktop/linux-debug/linux-5.12.6/m:$cdir:$cwd

上面的输出显然说 gdb 搜索这两个目录

1)

/home/fawad/Desktop/linux-debug/linux-5.12.6/n

` 2)

/home/fawad/Desktop/linux-debug/linux-5.12.6/m

在gdb里面做dir n m的意思是gdb搜索两个目录n和m?

$cdir:$cwd 是什么?是否应该将它们读取为cdir 目录(也在 cdir/ 目录中搜索)和(cwd 也意味着也在 $cwd/ 中搜索)

如果这是正确的,那么它是否搜索了 4 个目录?

另一个例子,当我这样做时

 dir drivers

搜索哪个目录

在此页面上https://sourceware.org/gdb/current/onlinedocs/gdb/Source-Path.html 它说

'$cdir' 使 GDB 在编译目录中搜索,如果在调试信息中记录了一个。如果调试信息中没有记录编译目录,则忽略'$cdir'。

所以基本上如果我的 program.o 在 /home/user786/test_program/program.o 那么$cdir 将是 /home/user786/test_program/

$cwd 会是什么? 在它说的链接中

‘$cwd’和‘.’不一样 前者(? is it $cdir) 在 GDB 会话期间跟踪当前工作目录的变化。而后者在您向源路径添加条目时会立即扩展到当前目录

上面的行是否表明如果我在位置/home/fwd/program1program1 有一个名为program1 的源程序,目录包含`/home/fwd/program1/headerFiles 中的头文件,那么$cwd 可以是$cdir: /头文件/?所以 headerFiles 的总路径将是 $cdir:/$cwd 包含头文件?

问题

我可以将 $cdir 和 $cwd 与 list $cdir:/cwd/header_file_1.h 之类的列表命令和 break 命令一起使用吗?

我如何知道 program1 的某个目标文件是否在 program1/program1_part1 中包含 program_part1.o,因为我可能想调试它?

如何设置$cwd?在运行 gdb list 命令之前

【问题讨论】:

    标签: c gdb


    【解决方案1】:

    所以基本上如果我的 program.o 在 /home/user786/test_program/program.o 那么 $cdir 将是 /home/user786/test_program/

    不正确:$cdirobject 文件的位置无关;这是编译目录。

    如果您有来源,例如/foo/bar/src 并在/tmp/foo/build 中使用命令行gcc -g -c /foo/bar/src/subdir/a.c -o subdir/a.o 编译,$cdir 将是/tmp/foo/build

    $cwd 是什么?

    $cwd 是当前目录。如果您在/tmp 中调用GDB,那么$cwd 将是/tmp。如果您使用例如更改当前目录(gdb) cd /tmp/foo/build,然后$cwd 将变为/tmp/foo/build

    【讨论】:

      猜你喜欢
      • 2014-10-30
      • 2014-07-15
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      相关资源
      最近更新 更多