GDBで実行可能ファイルを自動的に実行するにはどうすればよいですか?


91

私がしたいのですがgdb(:私は、「実行」をタイピングを嫌い動機は)私は、「実行」を入力したのだかのように、すぐに実行可能ファイルを実行します。

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

$ echo run | gdb myApp

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

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

回答:


127
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フォークを使用しておりGDB 6.3.50-20050815 (Apple version gdb-967)、Leopardの最新のXCodeにはが含まれているため、運が悪いです。

現在のGDB-7.0.1リリースのビルドは、1つの可能なソリューションです。ただ、必ずお読みくださいこれを


1
答えてくれてありがとう。この行は、「gdb ./a.out」と同じように動作します。
orion elenzil 2010年

3
コマンドラインで複数の-exオプションを渡すこともできることを確認しました。これらのオプションは、gdb入力を転送する前に順番に実行されます。
Tung Nguyen

:このソリューションでは、プログラムのような引数を持っている場合は動作しません./a.out a b
gigilibala

OSX / xcodeは箱から出してすぐにgdbをサポートしないため(lldbは新しいgdbです)、これはより良いアプローチのようです。
orion elenzil 2016年

コマンドファイルを作成し、gdb -xLinuxシステムで使用しました。OS XはLLVMclangを使用するため、のデバッグ機能を確認してくださいlldb
荒巻大輔

22

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

gdb -x your-script

どこあなたのスクリプトは、のようなものが含まれています。

file a.out
b main
r

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

編集

ここに本当に怠惰のための最適化があります:

  1. スクリプトを保存.gdbinitの中でworking directory
  2. その後、単にgdbを次のように実行します

    gdb

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


答えてくれてありがとう。それは、gdbプロンプトが表示されないことを除いて、私が欲しいもののように見えます。gdbが一時停止され、コマンドラインで「ctrl-z」と入力したかのように戻ります。私が「fg」の場合、gdbが再開し、アプリが実行されます。これはOS Xです。
elenzilオリオン

orion:mmmh-それは私には驚くべきことです。私が実際に使用しているすべてのUNIXフレーバー(Linux、Solaris、AIX)でうまく機能します。使用しているgdbのバージョンは何ですか?

私はこの動作を再確認しました-まだgdbが中断されたコマンドラインに戻ります。GNUgdb 6.3.50-20050815(Appleバージョンgdb-1518)(Sat Feb 12 02:52:12 UTC 2011)。
orion elenzil 2011年

@orionelenzil理由はわかりませんがfgr行の後に置くと、正気に動作します
dbr

startコマンドはb+のショートカットを提供しますrstackoverflow.com/a/2119606/895245
Ciro Santilli郝海东冠状病六四事件法轮機能

20
(echo r ; cat) | gdb a.out

猫はgdbが壊れた後も入力を続けることができます。


おっと、すごい。猫を停止するには、gdbを終了した後でctrl-cを押す必要がありますが、それは素晴らしいことです。
orion elenzil 2011年

3
これを使用すると、gdbインスタンスの一部のキーコントロールが失われるようです。
トレビノ

また、などの質問Make breakpoint pending on future shared library load? (y or [n])は自動的に「いいえ」と回答します。
ルスラン2017年

6

start コマンド

このコマンドは、別の優れたオプションです。

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

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

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

starti

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

低レベルの作業を行うときに最適です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.