2016-08-15 81 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

相關問題