使用非路径名在 gdb 中启动应用程序

Launch application in gdb with non-path name

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

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

"Cannot find /home/user/myapp ..."

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

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

    exec program_pathname program_arguments

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

    exec exec_wrapper program_pathname program_arguments

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

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

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

(gdb) set exec-wrapper -a myapp