web-dev-qa-db-ja.com

MinGW gdbデバッガーを使用してWindowsでC ++プログラムをデバッグするにはどうすればよいですか?

これに関するドキュメントを探しましたが、何も見つかりませんでした。 MinGWをインストールしましたが、うまく機能します。デバッガの使用方法がわかりません。

いくつかの簡単なコードを考えて、「mycode.cpp」というファイルで次のように言います。

int main()
{
    int temp = 0;

    for (int i = 0; i < 5; ++i)
        temp += i;

    return 0;
}

...これをどのようにデバッグしますか? WindowsでMinGWとGDBを使用してコードをデバッグするために使用するコマンドは何ですか? Visual Studioのようにコマンドラインからコードをステップ実行できますか?もしそうなら、私はそれを行うためにどのコマンドを使用しますか?

GDBを使用するためのチュートリアルはありますか?私は何も見つけられませんでしたが、誰かが私を素晴らしいものに導くことができるなら。複雑なコードをデバッグするために大量のstd::coutステートメントを書くのはうんざりです。

28
Mike Webb

最初のステップは、-gを使用してプログラムをコンパイルし、実行可能ファイル内にデバッグ情報を含めることです。

g++ -g -o myprog.exe mycode.cpp

その後、プログラムをgdbにロードできます。

gdb myprog.exe

開始するためのいくつかのコマンド:

  • break mainは、mainが呼び出されたときにデバッガーを中断させます。 break FILENAME:LINENOを使用してコード行を改行することもできます。たとえば、break mycode.cpp:4は、プログラムがmycode.cppの4行目に到達するたびに実行を中断します。
  • startはプログラムを開始します。あなたの場合、プログラムはすぐに終了するため、プログラムを開始する前にブレークポイントを設定する必要があります。

ブレークポイントで:

  • print VARNAME。これが、ローカル、静的、またはグローバルに関係なく、変数の値を出力する方法です。たとえば、forループでは、print tempと入力して、temp変数の値を出力できます。
  • stepこれは「ステップイン」と同等です。
  • nextまたはadv +1次の行に進みます(「ステップオーバー」など)。 adv mycode.cpp:8などを使用して、特定のファイルの特定の行に進むこともできます。
  • btバックトレースを出力します。これは基本的にスタックトレースです。
  • continueビジュアルデバッガーの「継続」操作とまったく同じです。次のブレークポイントまたはプログラムが終了するまで、プログラムの実行が継続されます。

読むのに最適なのは GDBユーザーマニュアル です。

41
Daniel Trebbien

この質問にはWindows用のgdb GUIがいくつかあります GDBフロントエンドDDDのWindowsバージョン

DDDは移植されていませんが

5
Martin Beckett