1行returnやプロパティのsetのみにブレークポイントを設定する

C#

早期returnは、
関数を読みやすくするための
有効な手段の1つです。
(実は意見が分かれるので深堀りはしませんが)

特に条件がシンプルであれば、
1行内に条件とreturnを書くと非常にすっきり書けます。

早期returnで考えるべきことを減らす

しかし、1行に複数の文を詰めてしまうと、
行ヘッダをクリックしても一番手前のものにしか
ブレークポイントが張れません。

そのため、
「デバッグが面倒になる」
と考えて、あえて複数行に書く人もいます。

ところが、VisualStudioでは、
1行に複数文混在していても、
ちゃんとブレークポイントを張る方法が存在します。

実は1行returnでも条件ヒット時のみブレークさせられる

本記事ではこのような時に使える
ブレークポイントの張り方について解説します。

スポンサーリンク

カーソルを合わせて「ブレークポイントの挿入」を実行

任意の位置にブレークポイントを張るには、
あまり使わない右クリックメニューである
「ブレークポイントの挿入」
を実行することでできます。

「ブレークポイントの挿入」
は、テキストエディタ上で右クリック→
「ブレークポイント」→「ブレークポイントの挿入」
で実行できます。

この時、
ブレークしたいコンテキスト上で右クリックするのが
ポイントです。

すると、冒頭の画像のように、
行頭をクリックしてブレークを張った時とは、
明らかに違う場所がハイライトされます。

「ブレークポイントを挿入」のショートカットキーは「F9」

さんさめ
さんさめ

便利なのは分かったけど、
毎回右クリックするの面倒過ぎるよ!!

いくら便利でも、
ブレークポイントを張るたびに、
右クリックしてメニューを選ぶのは、
とても大変です。マウスと中指がヘタってしまいます。

実は、ブレークポイントは「F9」キーでも
挿入することができます。

キャレットさえ合わせてF9を押せばいいので、
キーボードだけでブレークポイントの挿入が完結します。

1行にget,setがあるプロパティのセッターのみを止めることも可能

この操作は、1行プロパティのsetのみで
止めたい場合にも活用できます。

同様に、「set;」の部分にキャレットを合わせて、
右クリックメニューから「ブレークポイントの挿入」
を実行するとこの通りです。

値が設定される時だけブレークさせることができるので、
どこから値が書き換えられているか知りたい時に、
非常に重宝します。

三項演算子では使えない

まことに残念ながら、
三項演算子において、
条件に合う方(or合わない方)だけを止める、
といったことはできません…。

三項演算子は1文扱い

三項演算子を使うときは、
ブレークポイントを張った上での
デバッグはしづらくなることを心にとめておきましょう。

1行にラムダ式が混在している場合でも使える

その他、LINQのデバッグにも役立ちますね。
後述しますが、参考記事ではこちらが本題でした。

例えば、Whereに1行のラムダ式を渡すのは、
極めて頻出のコードです。

この場合も、ラムダ式の処理部分にキャレットを合わせて、
「ブレークポイントの挿入」で、
この通りです。

これを知っているか否かで
LINQのデバッグが段違いに捗ります。

まとめ

まとめです。

  • 1行内に複数文書くと、
    行頭クリックのブレークポイント挿入では
    手前の文にしか張れない
  • キャレットを合わせて「ブレークポイントを挿入」で
    任意の文にブレークを張れる
  • 1行return、1行プロパティ、LINQのデバッグなどで有効
  • 三項演算子はこの方法は使えないので
    デバッグ時の覚悟が必要

最後までお読みいただきありがとうございました。

参考記事

本記事は以下の記事から着想を得ています。
深く感謝いたします。

LINQで書くとデバッグしづらいよね?そんなことないよ

コメント

タイトルとURLをコピーしました