LINQ を使用することで、読みやすく、管理しやすい、強力で、簡潔な表現力のあるコードを書くことができるようになります。 唯一の問題は、LINQ を使用すると、コードの可読性が犠牲になってしまう点です。LINQ を使用しているコードの行でステップオーバー (F10) を行うと、複雑なロジックを多く実行するものの、実際に何が起こったのか理解することができません。ブレークポイントと手動でのステッピングを使用して LINQ をデバッグすると、無駄な時間を費やしてしまうことがあります。
Ozcode の革新的な LINQ デバッグ ビジュアライゼーションでは、Reveal や Search などの強力な Ozcode ツールを活用しながら、さまざまなアイテムが LINQ パイプラインをどのように通過したかを正確に把握でき、すべてのラムダ式の戻り値を確認できます。
デバッグ中に、実行ポイント (黄色の線) が LINQ クエリに達すると、各 LINQ 演算子の横にインジケーターが表示され、生成されたアイテムの数が示されます。
これらのインジケーターは、各オペレーターが消費したアイテムの数と生成されたアイテムの数を一目で把握できるため、重点を置くオペレーターを決定するのに役立ちます。
数値インジケーターの 1 つをクリックすると、Ozcode は LINQ デバッグモードになり、与えられた演算子が生成した項目を示す LINQ DataTip ウィンドウが開きます。 DataTip の "before/after" ボタンを押すと、生成されたアイテムとそのオペレータが消費したアイテムをすばやく切り替えることができます。
項目の 1 つをクリックすると、ヘッドアップ ディスプレイが更新され、各ラムダが LINQ パイプラインを通過した特定の項目として返されたものが反映されます。 もう 1 つの選択肢は、マウスホイールを使用して、数値アノテーションにカーソルを合わせることで、項目をすばやくスクロールし、その値がデバッグされたコードで、即時に変更されることを確認できます。
詳細な解析ツールウィンドウは、DataTip ウィンドウ、またはデバッグされたクエリの左側にあるラムダ アイコンをクリックして開くことができます。
Search と Reveal を使用して目的のオブジェクトを検索し、operator breadcrumbs を使用して LINQ パイプラインをナビゲートし、LINQ クエリのフローを視覚化します。
ブレークポイントで停止すると、Ozcode は実際にステップ実行しなくても、コードがどのように実行されるかを予測します。
注釈は、次の変数の値を示します。
ループの反復全体を移動し、さまざまな変数の値を経時的に確認します。
Predict (予測) は、「ライブコーディング」という言葉に新しい意味をもたらします。これは、デバッグ中に行った変更に対し、即座にフィードバックを与え、コーディングの間違いを非常に素早く修正できます。
VS2015 を使用している場合、Predict は LINQ クエリなどの、より複雑な式を予測することもできます。
シンプルでありながら強力なビジュアライゼーションにより、コード内で何が起こっているかを即座に把握することができます。
式をステップ実行すると、赤と緑の色分けによって、どの式がそれぞれ false/true を返すかを正確に確認できます。赤または緑で、式全体の結果を示します。
if/else および switch/case 式が評価され、どの部分が実行されるかが確認されます。
コードをステップ実行しながら、関連するすべての値を一列に表示します。Ozcode 表現を個々の部分に分解します。
Ozcode は、データへの抜本的な観測可能性を提供し、データオブジェクトの任意のレベルにドリルダウンできるようにします。
コレクションのサイズやオブジェクトグラフの複雑さに関係なく、メンバーの名前と値をすばやく簡単に検索します。
論理式から複雑なロジックまで、カスタム述語を使用してコレクションを検索します。
興味のあるプロパティに「スター」を付けて、オブジェクトがデバッガーにどのように表示されるかをカスタマイズして、本当に重要なデータに集中できるようにします。
オブジェクトに計算を追加して、デバッガーでのオブジェクトの表示方法をカスタマイズします。 オブジェクトは、同じタイプの他のメンバーと同じように表示されます。
Export では、デバッグ セッション終了後に使用するオブジェクト インスタンスのテキスト表現を、ファイルまたはクリップボードに保存することができます。
Export を使用すると、開発者はオブジェクトを JSON や XML に保存したり、または最後のデバッグ実行の値を使用して、単体テスト作成に使用可能な C# コードとして保存することができます。
エクスポートされたインスタンスが保存 (またはクリップボードにコピー) されると、それを使用してインスタンス状態を再現したり、外部の差分ツールを使用して、解析または比較することができます。
JSON 出力の場合、Ozcode は業界標準の Newtonsoft Json.NET シリアライザを使用しています。これにより、デシリアライズと結果の処理が非常に簡単になります。
ファイルを比較する場合は、diff アプリケーションを使用して相違点を特定します。残念ながら、2 つのオブジェクトを比較する必要があるときは、自分の目とメモリを信頼する必要があります。Ozcode の比較機能を使用すると、クリックするだけで、オブジェクトとコレクションを比較することができます。結果は横並びで表示され、構造の詳細をドリルダウンすることができます。
時間の経過とともにオブジェクトの変化を追跡するのはどうでしょうか?ユーザーのクラスのインスタンスを取り、さまざまな変異を実行する、長くて複雑なメソッドを考えてみましょう。何が実際に変わりましたか? 多くのメンバーがあるクラスでは、かなりの数のメンバー自身も含まれている場合もあります。違いを見つけるのは困難です。Ozcode の比較機能を使用すると、オブジェクトの状態を保存し、後でデバッグ中のオブジェクトを元の保存状態と比較することができます。この機能を実行した後、[Compare to Snapshot] オプションを選択すると、相違点を確認できます。
難しい問題をデバッグする際に、特にレガシーコードや多量のマルチスレッドのシナリオをデバッグする際、コードを実行するとシステムが何をするかを把握しようとすると、頭の中で一度に 12 個のボールをジャグリングするような気分になります。 Ozcode を使用すると、プログラム実行中にキーポイントで、オンザフライで動的ロギングを簡単に追加でき、Visual Studio に取り込まれた統合されたログビューアから出力を確認できます。デバッグをやめ、ログコードを追加し、簡単なトレースを追加するために、再ビルドする必要はありません。
トレースしたい値に対して "Create Tracepoint" コマンドを使用するだけです。トレースポイントはブレークポイントと似ていますが、プログラムの実行を中断するのではなく、トレースメッセージを書き込みます。
次に、"Add To Tracepoint" ボタンを使って、バグに関係すると思われる情報を追加します。
最後に、トレース メッセージが Tracepoints Viewer にあることを確認します。
把握しにくいバグは、状態の変化を伴うものです。プログラムの実行中のある時点で、いくつかのオブジェクトの状態が無効になる場合はどうしますか (さらに、いつ、どこでそのようになったのかも正確に判断できない場合に)? デバッガの値を調べているうちに、問題のあるプロパティ値を見つけたら、Magic Wand を使って "When Set - > Break" を選択します。次回プロパティ値が変更されると、Ozcode はデバッガに入り込み、プログラムの状態を検査し、問題のある値が、どのようにその部分に到達したかを正確に把握することができます。これらのセッター ブレークポイントは、通常のプロパティと自動プロパティの両方で機能し、ソースコードを持たないプロパティにセッター ブレークポイントを追加することもできます。
条件付きブレークポイントは、デバッグを非常に生産性の高いものにすることができますが、Ozcode を使用しないと、雑用のように感じてしまいます。Ozcode は条件付きブレークポイントを簡単に追加します! クリックするだけで、Ozcode は特定のプロパティ値に基づいて条件付きブレークポイントを設定し、ユーザーのために述語をあらかじめ入力します。
ブレークポイントに述語を追加するには、関連する変数にカーソルを置き、[Add Condition] ボタンをクリックします。
多くのプロジェクトでは、F5 を押すだけでデバッグ セッションを開始することはできません。代わりに、"Attach to Process" オプションを使用して、プロセスの長いリストから正しいプロセスを見つけて、最後にそれに接続する必要があります。 その後、デバッグ セッションを再開し、同じことをやり直す必要があります。そしてそれを何度も繰り返します。
QuickAttach を使用すると、Ozcode はプロセスに超高速で接続するルーチンを作成します。 "QuickAttach" ウィンドウには、最後にアタッチしたプロセスの一覧が表示されます。 "ピン" ボタンをクリックすると、そのプロセスにショートカットキーを添付できます。
これだけです。今後、"w3wp.exe" に接続する場合は、
アタッチしたいプロセスが "Recently Attached" リストにない場合は、いつでもそのプロセスを検索したり、UI の外観をプレビューすることもできます。
Ozcode を使用すると、どの Web サイトに接続しているかを正確に示すことができ、IIS アプリケーションプールに簡単に接続できます。
Ozcode のクイック アクションは、ユーザーの現在の状況に応じて、最も関連性の高いアクションを提供します。 クラス内のすべてのメソッドにブレークポイントを追加したいですか? 特定のメソッドへのすべてのエントリをトレースしますか? すぐに特定のコード行に進みたいですか? Alt + Shift + D を押してクイック アクション メニューを開くか、魔法の杖のアイコンをクリックして、魔法を実行してください!
Ozcode は、調査したい特定のオブジェクトをメモリ内で検索する作業を簡単にします。"Show All Instances of Type" を開くだけで、そのタイプのオブジェクトが、メモリにすべて入っていることを確認することができます。Ozcode の新しい探査ツールを使用することで、なぜそのオブジェクトはまだメモリに残っているのか、この値を含むオブジェクトがあるかどうかといった疑問に素早く簡単に答えることができるようになります。