デバッガーオプション
CLion では、以下のデバッガーを使用して C および C++ 実行可能ファイルをデバッグできます:
macOS および Linux 上の LLDB(英語)。
Windows では GDB(英語) 、Linux。
Windows 上の MSVC ツールチェーン用の LLDB ベースのデバッガー。
すべてのプラットフォーム上のカスタム GDB。
macOS および Linux 上のカスタム LLDB (WSL、Docker、リモートホストツールチェーンではまだ動作しません)。
すべてのプラットフォームで デバッグアダプタープロトコル (DAP) をサポートするデバッガー。
バンドルされているデバッガーの現在のバージョンは次のとおりです。
バンドルされたデバッガー | バージョン | サポートされるプラットフォーム |
|---|---|---|
LLDB | 21.1.7 | macOS, Linux |
GDB | 17.1 | Windows、Linux |
MSVC ツールチェーン用の LLDB | 9.0.0* | Windows |
デバッガー間の切り替え
に進みます。
右ペインの デバッガー フィールドで、現在のツールチェーンのデバッガーを選択します:

デバッガーのデータビュー
ダイアログでは、C/C++ データ表現をカスタマイズできます。

ここでは、標準ライブラリ型のレンダリング、モジュール名、関数パラメーター型と関数テンプレート引数、その他のオプションを制御できます。 または、 デバッグツールウィンドウ 、フレームビュー、変数ビューでコンテキストメニューを使用します。

STL コンテナーのレンダリング
GNU ライブラリレンダラを有効にする チェックボックスを設定すると、 gcc コンパイラーの使用時に GDB による STL コンテナーのレンダリングに影響します。 clang を GDB と組み合わせて使用する場合、このオプションは libstdc ++ に対してのみ機能します (詳細については、 次の章を参照してください)。
現在、このオプションは LLDB には適用されません。 LLDB(バージョン 9.0 以降)が以下の LLDB STL フォーマッタ で libc++ および libstdcxx を処理する方法を確認してください。
LLDB STL フォーマッタ
以下のリストは、LLDB バージョン 9.0 で正確です。
タイプ | libcxx | libstdc ++ |
|---|---|---|
文字列 |
|
|
配列 |
|
|
ベクター |
|
|
デック |
|
|
リスト |
|
|
フォワードリスト |
|
|
設定タイトル |
|
|
マップ |
|
|
マルチセット |
|
|
マルチマップ |
|
|
unordered_set |
|
|
unordered_map |
|
|
unordered_multiset |
|
|
unordered_multimap |
|
|
スタック |
|
|
キュー |
|
|
priority_queue |
|
|
タイプ | libcxx | libstdc ++ |
|---|---|---|
文字列 |
|
|
配列 |
|
|
ベクター |
|
|
デック |
|
|
リスト |
|
|
フォワードリスト |
|
|
設定タイトル |
|
|
マップ |
|
|
マルチセット |
|
|
マルチマップ |
|
|
unordered_set |
|
|
unordered_map |
|
|
unordered_multiset |
|
|
unordered_multimap |
|
|
スタック |
|
|
キュー |
|
|
priority_queue |
|
|
macOS 上の GDB の STL レンダラー
デバッグバックエンドとしての GDB と Clang (CMake のデフォルトコンパイラー)の組み合わせは、macOS で STL コンテナーのコンテンツを表示する際の制限を意味します。 回避策として、次の手順を試してください。
libc++の代わりにlibstdc ++ライブラリを使用してください。libstdc ++をプロジェクトに含めるには、 CMakeLists.txt に次のコマンドを追加します:set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++")または、 に移動し、 CMake のオプション フィールドでライブラリを指定します。
-DCMAKE_CXX_FLAGS="-stdlib=libstdc++"dwarf3 デバッグ情報形式を使用することもお勧めします。 このために、次のコマンドを CMakeLists.txt に追加します。
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -gdwarf-3") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -gdwarf-3")
カスタム .gdbinit/ .lldbinit ファイル
プロジェクトでデバッグ用にさらに多くの構成オプションが必要な場合は、カスタム初期化ファイル(GDB の場合は .gdbinit(英語) 、LLDB の場合は .lldbinit(英語) )を作成し、プロジェクトルートに配置できます。 このファイルは、他のプロジェクトファイルと一緒に VCS を介して共有できます。
通常、GDB/LLDB は、起動時に特定の順序で複数の初期化ファイルをロードします。 最初に、デバッガーはユーザーのホームディレクトリで初期化ファイルを探し、次に現在の作業ディレクトリ(プロジェクトルート)でファイルを探します。
デフォルトでは、セキュリティ上の理由から、プロジェクト固有の init ファイルからのコマンドは実行されません。 これを可能にするには、以下に説明するように、ホームディレクトリの init ファイルを変更します。
プロジェクト固有の .gdbinit/ .lldbinit の読み取りを有効にする
~/.gdbinit ファイルに権限を設定します。
GDB 11.1 以降では、代わりに $HOME/.config/gdb/gdbinit または $HOME/Library/Preferences/gdb/gdbinit を使用できます。
WSL を使用する場合は、WSL のホームディレクトリ /home/[user]/.gdbinit にある .gdbinit ファイルを編集します。
すべてのプロジェクト
set auto-load local-gdbinit on add-auto-load-safe-path /特定のプロジェクト用
set auto-load local-gdbinit on add-auto-load-safe-path [full path to the project root]/.gdbinit
ホーム ~/.lldbinit ファイルに権限を設定します。
GDB タイムアウト値の調整
CLion レジストリで対応するプロパティを設定することにより、GDB タイムアウト値を制御できます。
Ctrl+Shift+A を押すか、メインメニューから を選択します。 開いたポップアップで、
レジストリの入力を開始し、対応する項目を選択して Enter を押します。
開いたダイアログで、 cidr.debugger.timeout と入力し始めます。 ハイライトされた文字列の 値 フィールドをクリックし、タイムアウト値をミリ秒で入力します。

Windows 上での外部 GDB コンソールの設定
8.0 より前のバージョンの GDB を使用する Windows では、アプリケーションの入出力に別のコンソールが使用されます。 新しい GDB バージョンの場合、出力はデフォルトで CLion コンソールにリダイレクトされます。 ただし、外部出力ウィンドウを開くことに切り替えることができます。
Ctrl+Shift+A を押すか、メインメニューから を選択します。 開いたポップアップで、
レジストリの入力を開始し、対応する項目を選択して Enter を押します。
開いたダイアログで、 cidr.debugger.gdb.workaround.windows.forceExternalConsole と入力し始めます。 ハイライトされた文字列の 値 フィールドをクリックします。

コンパイル時の評価
Constexpr デバッガー は、コンパイラーの視点で本当に何が起きているのかを把握できます。評価をステップ実行中に値を確認し、どの if constexpr ブランチが発動したかを確認できます。 このツールはコンパイラーが何をしているかを正確に理解し、問題をより早く解決するのに役立ちます。