2016-08-15 16 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'の' -a'オプションをサポートするシェル? –

+0

@ MarkPlotnickいいえ、bash。それは二番目に賛成ですか? – soandos

+0

@ MarkPlotnick、申し訳ありません、はい、私はexec -aを持っています。問題は、GDBがスクリプトではなく起動していることです。 – soandos

答えて

1

GDBは通常、ターゲットは、シェルのコマンドライン

 
    exec program_pathnameprogram_arguments 

を使用してコマンドを実行します。しかし、それは

 
    exec exec_wrapperprogram_pathnameprogram_arguments 

がしばしばあるexec_wrapper別のコマンドに変更されますset exec-wrapperコマンドを持っていますが、それは、execコマンドが受け入れる任意の文字列です。

多くのシェル(bash、zsh、ksh93)は、execコマンドにargv [0]を設定するオプションを-aでサポートしています。

だから、あなたのシェルはexec -aをサポートしている場合、あなたはARGVと/home/user/myappを起動するには、次の[0] == myapp行うことができます://:

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

gdbの端末で実行している場合は動作しますが、何らかの理由でコマンド・ファイルから何らかの理由で渡しても何もしません。アイデア? – soandos

+0

@soandosあなたは明らかにできます:コマンドファイルはgdbや '.gdbinit'ファイルなどを実行するシェルスクリプトですか? –

+0

私はgdbを次のように実行しています: 'gdb myapp -command = .tmp_gdb_myapp_cmds'"コマンドファイル "の内容は次のようなものです:set environment、run(そして今はこのラッパー) – soandos

関連する問題