0Pricing
C++ Academy · レッスン

gdbとlldbの使用

プログラムをステップ実行します

「gdbとlldbの使用」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。

対話型デバッガー

gdb(GNU)と lldb(LLVM)を使うと、実行中のプログラムを一時停止し、変数を調べ、コードを1行ずつ実行できます。両者のコマンドは似ています。

デバッグ情報付きでコンパイルする

デバッガーが機械語をソースコードに対応付けられるように、必ず -g(できれば -O0 も)を付けてビルドしてください。

g++ -g -O0 main.cpp -o app
# then
gdb ./app

ブレークポイントの設定

ブレークポイントを設定すると、選択した場所で実行を一時停止できます。

  • gdb:break main.cpp:10 または break myFunc
  • lldb:breakpoint set --file main.cpp --line 10 または b myFunc

プログラムの実行

run(または r)で実行を開始します。プログラムは最初に到達したブレークポイントで停止し、調査できる状態になります。

コードをステップ実行する

基本的なステップ実行コマンド(gdb と lldb で同じ名前です):

  • next / n:呼び出しの中には入らず、1行実行します
  • step / s:呼び出しの中に入って実行します
  • finish:現在の関数が戻るまで実行します
  • continue / c:次のブレークポイントまで実行を再開します

変数の調査

値を表示して、プログラムの状態を把握します。

  • gdb:print x、print arr[2]
  • lldb:frame variable または p x

セッション例の対象

次のプログラムを考えてみましょう。ループで停止し、反復ごとに sum を表示するとよいでしょう。

#include <iostream>

int main() {
    int sum = 0;
    for (int i = 1; i <= 3; ++i) {
        sum += i;
    }
    std::cout << sum << "\n";
    return 0;
}

コールスタック

停止中に backtrace(gdb)または bt(lldb)を使うと、関数呼び出しの連鎖が表示されます。frame N で呼び出し元のフレームに切り替え、そのローカル変数を調べられます。

ウォッチポイント

ウォッチポイントを設定すると、変数が変更されたときにプログラムが停止するため、予期しない変更が発生した場所を見つけやすくなります。

  • gdb:watch counter
  • lldb:watchpoint set variable counter

条件付きブレークポイント

条件が成立したときだけ停止することで、手動でステップ実行する手間を省けます。

  • gdb:break loop.cpp:5 if i == 99
  • lldb:breakpoint set --line 5 --condition "i == 99"

クラッシュのデバッグ

クラッシュするプログラムをデバッガー上で実行すると、セグメンテーション違反が発生した行で停止します。その後 bt を使って、そこに至った経路を確認できます。後からコアダンプを解析することもできます。

クイックチェック

ステップ実行のコマンドを思い出してください。

まとめ

対話型デバッグについて学びました。

  • -g -O0 を付けてビルドします
  • ブレークポイントを設定し、run の後に next/step/finish を使います
  • print/frame variable と backtrace で調査します
  • ウォッチポイントと条件付きブレークポイントで、見つけにくいバグを追跡します

よくある質問

「gdbとlldbの使用」レッスンは無料ですか?

はい。「gdbとlldbの使用」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。

「gdbとlldbの使用」で何を学びますか?

プログラムをステップ実行します ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C++ Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「gdbとlldbの使用」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC++ Academyレッスンでコードを書いて実行できますか?

はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. gdbとlldbの使用
  2. AddressSanitizer
  3. UBSanとTSan
  4. Valgrindの基礎
← C++ Academyに戻る