【问题标题】:Launch application in gdb with non-path name在 gdb 中使用非路径名启动应用程序
【发布时间】:2021-11-22 03:29:16
【问题描述】:

我正在尝试在 GDB 中启动旧应用程序,它要求它的 argv[0] 值不包含除字母数字字符以外的任何内容。

每当我在 GDB 中启动程序时,它似乎会在运行程序之前将名称扩展为完整路径,所以我收到如下错误(因为它无法处理斜杠):

“找不到 /home/user/myapp ...”

是否可以在 GDB 中使用相对路径运行程序,以便它只会看到“myapp”?

【问题讨论】:

  • 您是否有argv0 命令或支持-a 选项到exec 的shell?
  • @MarkPlotnick 不,然后 bash。这是对第二个的肯定吗?
  • @MarkPlotnick,对不起,是的,我有 exec -a。问题是 GDB 正在启动,而不是脚本

标签: path gdb argv


【解决方案1】:

Gdb 通常使用 shell 命令行运行目标命令

执行 program_pathname program_arguments

但它有一个set exec-wrapper 命令将其更改为

exec exec_wrapper program_pathname program_arguments

exec_wrapper 通常是另一个命令,但它可以是exec 命令接受的选项。

许多 shell(bash、zsh、ksh93)支持 -a 选项到 exec 命令来设置 argv[0]。

因此,如果您的 shell 支持 exec -a,您可以执行以下操作以使用 argv[0]==myapp 调用 /home/user/myapp

(gdb) set exec-wrapper -a myapp

【讨论】:

  • 因此,如果我在 gdb 的终端中执行此操作,它可以工作,但由于某种原因,当我从命令文件执行此操作时,我传入它不会执行任何操作。想法?
  • @soandos 你能澄清一下:命令文件是运行 gdb 的 shell 脚本,还是 .gdbinit 文件,还是别的什么?
  • 我正在像这样运行 gdb:gdb myapp -command=.tmp_gdb_myapp_cmds“命令文件”的内容是这样的:设置环境,然后运行(现在是这个包装器)
  • 如果有帮助,我很乐意改变它。
  • 如果我将 gdb 命令放在一个文件中,然后 gdb 使用更改后的 argv[0] 运行 myapp,但文件中 run 之后的命令总是得到错误 来源错误命令文件。我不知道为什么。这就是你所看到的吗?如果我将 gdb 调用为 gdb myapp -ex "set exec-wrapper -a foo" -ex run -ex quit,那么一切都很好,但我意识到您不想使用无数命令行选项运行 gdb。
猜你喜欢
  • 1970-01-01
  • 2012-10-23
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 2015-12-10
  • 2015-02-02
  • 2021-02-10
相关资源
最近更新 更多