第6回 Windowsアプリのデバッグ&リリース連載:簡単! Visual Studio 2015入門(5/6 ページ)

» 2015年10月13日 05時00分 公開
[かわさきしんじInsider.NET編集部]

VS 2015で追加されたデバッグ関連の新機能

 ここまでに見てきたのはVSでのデバッグ作業の基本中の基本だ。VS 2015では「診断ツール」というデバッグをさらに便利に行うための機能も追加されたし、先ほど触れたようにブレークポイントについても簡単にさまざまな設定を行えるようになっている。デバッグ作業の説明の最後にこれらについて簡単に説明しておこう。まずは、先ほど見たブレークポイントの話からだ。

ブレークポイントの設定

 VS 2015ではブレークポイントを示す赤い「」の近くにマウスポインターを移動すると、次のようなツールチップが表示され、そこからそのブレークポイントに関する設定を簡単に行えるようになっている(設定項目自体は以前のバージョンにも存在しており、アクセスが簡便になったということだ)。

ブレークポイントの設定を行う二つのボタン ブレークポイントの設定を行う二つのボタン
  (1) [設定]ボタン: ブレークポイントに関連する設定を行うダイアログを表示する。
  (2)[ブレークポイントを無効にする]ボタン: ブレークポイントが無効化される。無効化されている間はこの行が実行されてもデバッグ実行が中断されない。

 このうち、右側の[ブレークポイントを無効にする]ボタンはブレークポイントの有効/無効を切り替えるのに使用する(無効化されている場合は[ブレークポイントを有効にする]ボタンになる)。本連載で見てきた時計アプリのようなシンプルなアプリではなく、より複雑なアプリのデバッグを行っている際には、設定したブレークポイントには一時的に着目をしておらず、そこでアプリの実行が中断されるとわずらわしい場合がある。そのようなときにブレークポイントを削除せずに無効化できると便利な場合がある。

 左側の[設定]ボタンをクリックすると、次のような画面が表示され、各種の設定を行える。

ブレークポイントの設定ウィンドウ(1) ブレークポイントの設定ウィンドウ(1)

 [場所]の右側のリンク(ここでは「Display.cs、行: 32〜」)をクリックすると、ブレークポイントの場所を手動で設定できる。「ソースと一致させる」というのは、「実行しているアプリのビルドに使われたソースコードと、VS 2015で開いているプロジェクトに含まれているソースコードを一致させる」という意味だ。

 本稿で行ったように、VS 2015内で簡単なアプリをビルドして、デバッグ実行するときにはソースコードが一致しないことはないだろう。だが、アプリをエクスプローラーから実行し、それにVS 2015でアタッチ(アプリを実行しているプロセスにVS 2015から接続)してデバッグを行う場合や、自社製ではないライブラリやフレームワークを使用しており、デバッグでそれらのソースコードを外部から取得する必要がある場合などには(VS 2015で開いているソースコードや、提供されているソースコードのバージョンやリビジョンが異なっているために)ソースコードが一致しないことがある。

 デフォルトでは「一致させる」となっているため、一致していない場合には、そのブレークポイントは無効化される。だが、一致しないソースコードでも参考情報として表示したいのであれば、上記のリンクをクリックして[元と異なるソース コードを許可する]チェックボックスをオンにする。

ブレークポイントの設定ウィンドウ(2) ブレークポイントの設定ウィンドウ(2)
ブレークポイントの「場所」を設定しているところ。

 その下にある[条件]チェックボックスと[アクション]チェックボックスをオンにすると、ブレークポイントでデバッグ実行を中断する条件の設定や、ブレークポイントに達したときに行う補足的な処理を指定できる。

ブレークポイントの設定ウィンドウ(3)
ブレークポイントの設定ウィンドウ(3) ブレークポイントの設定ウィンドウ(3)
[条件]チェックボックスをオンにするとブレークポイントでデバッグ実行を中断するための条件を指定できる(上の画面)。[アクション]チェックボックスをオンにすると、そのブレークポイントの実行時に[出力]ウィンドウに表示するメッセージを指定できる。変数やプロパティなどの式の値を表示するには「{}」で囲む。

 [条件]チェックボックスをオンにすると、ブレークポイントでデバッグ実行を中断してコードエディターに復帰する条件を指定できる。

  • 条件式: 指定した条件式がTrueになった場合や指定した変数の値が変化した場合に中断する
  • ヒットカウント: そのブレークポイントが指定した回数だけ実行されたところで中断する
  • フィルター: マシン名/プロセスID/プロセス名/スレッドID/スレッド名を基に中断するかどうかをフィルタリングする

 [アクション]チェックボックスをオンにすると、ブレークポイントに達したときに[出力]ウィンドウに表示するメッセージを指定できる。[実行を継続します]チェックボックスをオンにすると、中断せずに、そのまま実行が継続される。予備調査的に変数の値を[出力]ウィンドウに表示させ、着目している部分の動作が正常かの確認をしたい場合には[実行を継続します]チェックボックスをオンにしておくとよいだろう。

診断ツール

 VS 2015でデバッグ実行を開始すると、IDEには診断ツールが表示されるようになった(VS Express 2015では使用できない)。診断ツールはデバッグビルド(デバッグで使用する各種情報を含んだビルド)とリリースビルド(デバッグ用の情報を含まない製品リリース用のビルド)の両者でメモリやCPUの使用量などを収集/分析できる。

 例えば、MyClockアプリをデバッグ実行し、上で設定したブレークポイントでデバッグ実行が中断した時点での診断ツールの表示を以下に示す。

診断ツール 診断ツール

 このウィンドウは大きく二つの領域に分かれていて、上部にはデバッグ実行開始から現在までのタイムライン/発生したブレークポイントイベント/アプリが使用しているメモリ量/CPUの使用率が表示される。下部には三つのタブがあり、イベント/メモリ量に関する詳細な情報が表示される(VS Community 2015の場合。上位エディションではIntelliTraceと呼ばれる機能と連携してより詳細な情報が表示される)。デバッグ実行時には[CPU使用率]タブには情報は表示されない。CPU使用率の詳細を知るには、メニューバーの[デバッグ]−[デバッグなしで診断ツールを開始]を選択する必要があるので注意しよう。

 上の画面ではブレークポイントにヒットして、デバッグ実行が中断したことが分かる。メモリ使用量は当然のように起動直後に増え、その後は増減はない。これはMyClockアプリでは最初にさまざまなオブジェクトを作成した後は時刻を表示し続けるだけなので当然だ。より複雑なアプリでは、ユーザーの操作に応じて、実行時にメモリの使用量が変化するものだ。アプリが予想以上にメモリを使用している場合には診断ツールの[メモリ使用量]タブにある[スナップショットの作成]ボタンを使用して、メモリ使用量の増減を分析可能だ。

 以下の例はMSDNの「Visual Studio 2015 でのデバッグ中のパフォーマンス分析」ページから入手可能なサンプルアプリでメモリ使用量のスナップショットを二つ作成したところだ。

メモリ使用量のスナップショット メモリ使用量のスナップショット
二つ目のスナップショットでは、オブジェクトの数/ヒープサイズの両者が一つ目のスナップショットよりも増加しているのが分かる。それぞれの値はリンクになっていて、それらをクリックすると詳細な情報がコードエディター部分に表示される。

 このようにスナップショットをいくつか作成して、スナップショット間でのメモリ使用量の差分を調べていくことで、自分のアプリがどのようにメモリを消費しているかが把握できる。

 メニューバーの[デバッグ]−[デバッグなしで診断ツールを開始]を選択した場合には(CPU使用率を調べたいときなど)、以下のようなウィンドウが表示される(ただし、アプリのソリューション構成をリリース用のビルドに設定する必要がある。この方法については次ページで解説する)。

デバッグなしで診断ツールを開始したところ デバッグなしで診断ツールを開始したところ

 このウィンドウで計測したい項目を設定して[開始]ボタンをクリックすると、リリースバージョンのアプリに対して、調査が開始される。

 本連載で作成したシンプルなMyClockアプリでは、これらは過剰な機能だが、.NET開発に慣れてきたらぜひとも活用するようにしよう。

 さて、以上でプログラムは完成した。せっかく作ったので、このプログラムを実際にユーザーに使ってもらえるようにしてみよう。次に、プログラムのリリースと配布について簡単に解説しておく。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。