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

Path 使用非路径名在gdb中启动应用程序,path,gdb,argv,Path,Gdb,Argv,我试图在GDB中启动一个遗留应用程序,它要求它的argv[0]value不包含字母数字字符以外的任何内容 每当我在GDB中启动程序时,它似乎会在运行程序之前将名称扩展为完整路径,因此我会得到如下错误(因为它无法处理斜杠): “找不到/home/user/myapp…” 是否可以使用相对路径在GDB中运行程序,以便只看到“myapp”?GDB通常使用shell命令行运行目标命令 exec program_pathname program_arguments exec_包装器通常是另一个命令,但它可

我试图在GDB中启动一个遗留应用程序,它要求它的
argv[0]
value不包含字母数字字符以外的任何内容

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

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


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

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

exec program_pathname program_arguments exec_包装器通常是另一个命令,但它可以是
exec
命令接受的任意字符串

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

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

(gdb) set exec-wrapper -a myapp

您是否有支持
-a
选项以执行
的命令或shell?@MarkPlotnick No和bash。这是对第二个的肯定吗?@MarkPlotnick,对不起,是的,我有exec-a。问题是GDB正在执行启动,而不是脚本,所以如果我在GDB的终端中执行,它会工作,但是由于某种原因,当我从我传入的命令文件中执行启动时,它不会执行任何操作。想法?@soandos你能澄清一下:命令文件是运行gdb的shell脚本,还是一个
.gdbinit
文件,或者其他什么吗?我是这样运行gdb的:
gdb myapp-command=.tmp\u gdb\u myapp\u cmds
如果有帮助,“命令文件”的内容是:设置环境,然后运行(现在是这个包装器),我非常乐意改变这一点。如果我将gdb命令放在一个文件中,那么gdb将使用修改后的argv[0]运行myapp,但是
run
之后的文件中的命令总是在源代码命令文件中获取错误。我不知道为什么。这就是你看到的吗?如果我调用gdb作为
gdb myapp-ex“set exec wrapper-a foo”-ex run-ex quit
,那么一切都很好,但我意识到您不想使用大量命令行选项来运行gdb。
(gdb) set exec-wrapper -a myapp