ステップフィルター
ステップフィルターを使うと、デバッガーで C および C++ コードをステップ実行する際に選択した関数をスキップできます。 ステップイン が通常はフィルターに一致する関数に入る場合、CLion はそれをステップオーバーします。 ステップイン強制で関数に入ることもできます。
ステップフィルターは LLDB と GDB のデバッガーバックエンドで動作し、 ステップイン のみに適用されます。 ステップオーバー と ステップアウト は影響を受けません。
ステップフィルターは、次の 3 つのソースからルールを取得し、この順序でチェックします:
.natstepfilter および .natjmc ファイルで、開いているプロジェクトに属するもの。
システム全体とユーザーごとの Visual Studio Visualizers ディレクトリ(Windows のみ)にある .natstepfilter および .natjmc ファイル。
IDE 設定で管理する正規表現パターン(C++ 標準ライブラリ用の組み込みセットを含む)。
各ソースごとに、一致した最初のルールが有効になります。 したがって、 .natstepfilter ファイル内の StepInto ルールは、同じファイル内で後に記述されている NoStepInto ルールよりオーバーライドされます。また、プロジェクトファイルは常に IDE 設定からの正規表現パターンよりも優先されます。
ルールがマッチする前に、CLion はデバッガーによって報告される関数名を正規化します。cv 修飾子と参照修飾子が除去され、戻り値の型が外れ、匿名名前空間が隠され、パラメーターリストも外されます。 そのためパターンは、例えば std::vector<.*>::push_back のような修飾名のみにマッチさせ、パラメーターシグネチャーにはマッチさせないようにしてください。
CLion には、一般的な C++ 標準ライブラリのコード編集ヘルパー、スマートポインターアクセサー、libstdc++ の内部処理などをスキップする組み込み正規表現パターンのセットが含まれています。 このリストはプロジェクトごとに拡張や置換が可能です。
IDE でステップフィルターを設定する
を開きます。

このページには次のオプションがあります:
オプション | 説明 |
|---|---|
構成ファイルからステップ実行ルールをロードする | 有効化すると、デバッガーは開いているプロジェクトに属するすべての .natstepfilter および .natjmc ファイルを読み込み、Windows でも Visual Studio Visualizers ディレクトリに配置されたファイルも読み込みます。 チェックボックスを無効化すると、次回のデバッグセッションでプロジェクト同梱ファイルおよび Visual Studio 提供ファイルがともに無視されます。 |
関数にステップインしない | 有効化すると、デバッガーはチェックボックスの下に一覧されている正規表現パターンを適用します。 各行は、関数の完全修飾名で一致します。 パラメーターリストと戻り値の型はマッチング前に除去されるため、 .natstepfilter ファイルからのパターンは、ここで設定されたパターンよりも優先されます。そのため、このページで設定を変更しても、同じ関数がファイルベースのルールに含まれている場合は効果がありません。 |
ステップ実行診断 | ステップフィルターの動作がデバッガーコンソールでどのように報告されるかを制御します:
|
変更を保存するには、 変更を適用 をクリックします。 新しい設定は次回のデバッグセッションに反映されます。 実行中のセッションは、開始時のルールを維持します。
プロジェクトファイルでステップフィルターを設定する
.natstepfilter または .natjmc ファイルをプロジェクトに追加することで、ステップフィルタールールをバージョン管理下に置くことができます。 構成ファイルからステップ実行ルールをロードする が有効化されていれば、CLion はそれらを自動的に認識します。
.natstepfilter
.natstepfilter ファイルは Visual Studio ステップフィルター XML スキーマを使用します。 各 <Function> 要素には、 <Name> の正規表現と <Action> 、そして特定のライブラリにルールを制限する任意の <Module> の正規表現が含まれます。 CLion は2つのアクションをサポートしています:
NoStepInto— ステップイン で関数をスキップします。StepInto— 他のルールで関数がスキップされる場合でも、 ステップイン でその関数に入ることを強制します。 これは、以前のNoStepIntoルールで広範なパターンが適用されているコードの例外処理などに便利です。
Visual Studio の NonUserCode アクションは、デバッガーでエラーとして拒否されます。 .natjmc ファイルを使ってコードを non-user としてマークしてください。
プロジェクト内にファイルを配置すると、IDE によってインデックスされます。 プロジェクトスコープ外のファイルは自動的に読み込まれません。
.natjmc
.natjmc ファイルは Visual Studio Just My Code スキーマを使用します。 CLion はそれらを追加のステップフィルターソースとして読み込み、含まれているモジュール、ファイル、関数を外部コードとして扱います:
属性のマッチ条件は次のとおりです:
<Module Name="...">および<File Name="...">ではグロブパターンを使用できます。*および?は Visual Studio と同様に使用してください。<Function Name="...">は、正規化された関数名に対してマッチする正規表現です。<Function Module="...">はリテラル(大文字小文字を区別しない)モジュール名です。グロブや正規表現ではありません。 正確に読み込まれるモジュール名(例:libboost_system.so.1.83.0またはMyApp.exe)を指定してください。<Module Company="...">は現在フィルターとして有効です。CLion はバイナリに埋め込まれた会社メタデータを読み込まないため、<Module>ルールがCompany属性を持つ場合は無視されます。 ルールを有効にしたい場合は、その属性を省略してください。
Visual Studio Visualizers ディレクトリ(Windows)
Windows では、CLion は Visual Studio が .natvis 、 .natstepfilter 、 .natjmc ファイル用に使用している同じディレクトリもスキャンします:
%VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers — システムビジュアライザー(Unreal Engine 連携などのサードパーティ SDK 提供分を含む)。
%USERPROFILE%\Documents\Visual Studio <version>\Visualizers — ユーザービジュアライザー。
これらのフォルダーは、マシン上に Visual Studio のインストールが検出された場合のみスキャンされます。
予期しないステッピング動作の診断
ステップインで期待していた関数がフィルターされない場合は、 ステップ実行診断 を 詳細 に切り替えてデバッグセッションを再実行してください。 その後、デバッガーコンソールに、どの構成ファイルが読み込まれたか、どのパターンが一致したか、どの関数名がマッチング用に正規化されたかが出力されます。 予期しない動作の一般的な原因は次のとおりです:
正規表現のタイプミス。 テーブル内のパターンを編集すると、IDE が正規表現エラーをハイライト表示します。
同じ .natstepfilter ファイル内で、先頭にある
StepIntoルールが後方のNoStepIntoルールをオーバーライドしている。 より具体的なルールを先に並べてください。プロジェクト内の .natstepfilter ファイルが IDE の設定パターンをオーバーライドしている。 冗長ログでは、一致するルールを提供したファイルのパスが表示されます。
デバッガーごとに異なる関数名。 CLion はマッチング前にほとんどの違い(修飾子、戻り値の型、パラメーターリスト、匿名名前空間)を正規化しますが、Linux や macOS の古い LLDB では戻り値の型が含まれる名前になることがあります。その場合は、
std::max<.*のような修飾名だけにマッチするパターンを書くようにしてください(int std::max<.*>ではなく)。