web-dev-qa-db-ja.com

GDBで実行可能ファイルを自動的に実行する方法は?

「run」と入力したかのように、gdbですぐに実行可能ファイルを実行したいと思います(動機:「run」と入力するのが嫌いです)。

1つの方法は、次のようにコマンドをgdbにパイプすることです。

$ echo run | gdb myApp

しかし、このアプローチの問題は、gdbとの対話性が失われることです。ブレークポイントがトリガーされるか、myAppがクラッシュすると、gdbは終了します。この方法は here で説明されています。

--helpのオプションを見ると、これを行う方法がわかりませんが、おそらく何かが欠けています。

79
orion elenzil
_gdb -ex run ./a.out
_

_a.out_に引数を渡す必要がある場合:

_gdb -ex run --args ./a.out arg1 arg2 ...
_

編集: Orion これはMac OSXでは動作しないと言います。

_-ex_フラグは_GDB-6.4_(2005年にリリース)以降利用可能ですが、OSXはAppleのGDBのフォークを使用し、Leopardの最新のXCodeにはGDB 6.3.50-20050815 (Apple version gdb-967)が含まれているため、幸運。

現在の_GDB-7.0.1_リリースをビルドすることは、可能な解決策の1つです。必ず this と読んでください。

115

私はgdbスクリプトを使用します:

gdb -x your-script

your-scriptには次のようなものが含まれます:

file a.out
b main
r

その後、通常のインタラクティブなgdbプロンプトが表示されます

[〜#〜] edit [〜#〜]

本当に怠け者のための最適化は次のとおりです。

  1. .gdbinitworking directoryとしてスクリプトを保存します。
  2. その後、単にgdbを次のように実行します。

    gdb

...およびgdbは、.gdbinitのコンテンツを自動的にロードして実行します。

22
anon
(echo r ; cat) | gdb a.out

Catを使用すると、gdbが中断した後も入力を続けることができます。

20
cadabra

start command

このコマンドは別の良いオプションです:

gdb -ex start --args ./a.out arg1 arg2

Runに似ていますが、mainに一時的なブレークポイントを設定し、そこで停止します。

この一時的なブレークポイントは、ヒットすると無効になります。

starti

関連するstartiもあります。これは、プログラムを開始し、代わりに最初の命令で停止します。以下も参照してください。 GDBの最初のマシンコード命令で停止

あなたがいくつかの低レベルのものをやっているときに素晴らしい。

gdb -x <(echo run) --args $program $args

3
meth