2016-08-15 56 views
0

我试图在GDB中启动遗留应用程序,并且它要求它的argv[0]值不包含除字母数字字符以外的其他任何内容。使用非路径名在gdb中启动应用程序

每当我在GDB启动该程序似乎它扩展名运行程序之前是完整路径,所以我得到这样一个错误(因为它不能与斜线处理):

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

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

+0

你有任何的['argv0'(HTTP:// manpages.ubuntu.com/manpages/xenial/en/man1/argv0.1.html)命令还是一个支持'exec'选项的shell? –

+0

@MarkPlotnick不,和bash。对第二个人来说,这是否是肯定的? – soandos

+0

@MarkPlotnick,对不起,是的,我有exec -a。问题是GDB正在启动,而不是脚本 – soandos

回答

1

GDB运行正常使用外壳命令行

 
    exec program_pathnameprogram_arguments 

目标命令,但它有一个set exec-wrapper命令,将这个改变到

 
    exec exec_wrapperprogram_pathnameprogram_arguments 

exec_wrapper是经常另一个命令,但它可以是exec命令接受的任意字符串。

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

所以,如果你的shell支持exec -a,你可以做以下调用/home/user/myapp用的argv [0] == myapp

(gdb) set exec-wrapper -a myapp 
+0

因此,如果我在gdb的终端中执行它,但由于某种原因,当我通过它传递的命令文件执行它时,它不起作用。想法? – soandos

+0

@soandos你能澄清一下:命令文件是一个运行gdb的shell脚本,还是'.gdbinit'文件或其他东西? –

+0

我正在运行gdb,像这样:'gdb myapp -command = .tmp_gdb_myapp_cmds'“命令文件”的内容是这样的:set environment,并运行(现在这个包装) – soandos