連載

プロフェッショナルVB.NETプログラミング

第13回 デバッグとトレース

(株)ピーデー
川俣 晶
2002/07/13

Page1 Page2

TraceとDebugの違いを確認する

 TraceとDebugの違いがいまひとつピンとこない人のために、具体的な違いを実感する簡単なプログラムを記述してみた。

 1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 2:   Trace.WriteLine("Trace.WriteLine")
 3:   Debug.WriteLine("Debug.WriteLine")
 4: End Sub
TraceとDebugの違いを比較するためのVB.NETのサンプル・プログラム5

 このソースをDebugビルドして実行すると以下のようになる。

 1: Trace.WriteLine
 2: Debug.WriteLine
サンプル・プログラム5の実行結果(Debugビルドの場合)

 このソースをReleaseビルドして実行すると以下のようになる。

 1: Trace.WriteLine
サンプル・プログラム5の実行結果(Releaseビルドの場合)

 見てのとおり、Trace.WriteLineは常時機能するが、Debug.WriteLineが機能するのはDebugビルドのときだけである。

 Debugビルドは、デバッガでソース・コード・デバッグができるが、最適化機能が働かないため、動作が遅く、プログラムも大きくなる傾向にある。それに対して、Releaseビルドは最適化機能が働き、小さく素早いコードが生成されるが、デバッグ情報がないため、ソース・コードを追いかけながらデバッグすることはできない。両者をうまく切り替えながら使っていこう。

条件式抜きで必ず停止させるFail

 Assertメソッドを使っていると、ときどき条件式が必要ない場合に遭遇する。つまり、ソース・コード上のある位置を実行してしまったというだけで、すでに間違っていることが明白な場合である。以下は、そういう状況を表現してみたプログラムである。

  1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2:   Dim i, sum As Integer
  3:   For i = 0 To 99
  4:     'sum = sum + i
  5:     If sum > 100 Then
  6:       Trace.WriteLine(sum)
  7:       Exit Sub
  8:     End If
  9:   Next
 10:   Trace.Fail("内部エラー: ループが意図しない理由で終了しました")
 11: End Sub
条件式が不要なTrace.Failメソッドを使用したVB.NETのサンプル・プログラム6

 このソース・コードは本来、足し算を続け、3行目のForループが完結する前に終了することを意図している。しかし、4行目に書かれるべき足し算のコードを書き忘れているため、Forループから中途脱出せず、ループを終了してしまう。つまり10行目が実行されることは、このプログラムの意図として必ず間違いということになる。そのような場合は、Assertメソッドではなく、10行目のようにFailメソッドを使うとよい。Failメソッドは条件に関係なく、常にプログラムの実行をそこで一時停止させる効能を持つ。

 これを実行すると以下のようになる。

サンプル・プログラム6の実行結果

 見てのとおり、結果はAssertと同じだが、条件式を書く必要はなくなっている。

次回予告

 次回はエラー処理と例外処理を取り上げたいと考えている。End of Article


 INDEX
  連載 プロフェッショナルVB.NETプログラミング
  第13回 デバッグとトレース
    1.Debug.AssertとTrace.Assert
  2.TraceとDebugの違いを確認する
 
「プロフェッショナルVB.NETプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間