Visual Studio 2010 - デバッグ - 例外を発生させる
- 1. 概要
- 2. コーディング
- 3. 例外を発生させる
- 4. throw ではダメ
1. 概要
ソースの単体試験を行っているときに、例外発生時の処理を試験したいときがあります。
フォルダやファイル操作関係の例外であれば、対象のフォルダやファイルに、外侮からなにかしかけをしたりすることで実現できますが。
なかなか、発生させにくい、例外ちゅうのもあります。
無理やり発生させるために、コードをたびたび改変するちゅうのもどうかなというのもあります。
ある程度、コードの改変は必要ですが、埋め込んだままでも問題がないようには、できるようです。
今んとこ「System.Threading.ThreadInterruptedException」を発生する方法しか、例示できませんが、他の方法がわかれば、加筆します。
本ページは、下記のサイトを参考にさせていただきました。
「Visual Studio のイミディエイトウィンドウを使ってデバッグする」
「VisualStudio のイミディエイトウィンドウが便利」
「Re[1]: イミディエイトウインドウで 式の評価ができなくなる件」
「デバッガーでの例外の管理 - Visual Studio (Windows)」
2. コーディング
まぁ、こういう風にコーディングするという一例です。
using System;
namespace Console
{
class Program
{
static void Main(string[] args)
{
loop();
}
private static void loop()
{
try
{
for (int i=0; i<10000; i++)
{
System.Console.WriteLine(i.ToString());
System.Threading.Thread.Sleep(100);
}
}
catch (System.Threading.ThreadInterruptedException)
{
System.Console.WriteLine("中断発生");
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("例外発生"+ Environment.NewLine + ex.ToString());
}
}
static private void throwInterrupt()
{
System.Threading.Thread.CurrentThread.Interrupt();
}
}
}
32~35行が、デバッグのために余分に次足した行です。
呼出用のメソッドとして、「static」で「void」型のものを用意しておいて、その中で例外を発生させる仕組みをコーディングしておきます。
3. 例外を発生させる
デバッガを起動する前に、例外を発生させたいあたりに、「break」ポイントを置いておきます。
「break」中でないと、操作はできないようなのです。
起動して、「イミディエイトウィンドウ」を開きます。
(開いていない場合は、「デバッグ」→「ウィンドウ」→「イミディエイト」)
イミディエイトウィンドウで、仕込んでおいた。
throwInterrupt()
と入力(セミコロン「;」はつけては、いけないようで)して Enter。
このあと、実行を押すと、例外が発生しております。

4. throw ではダメ
前述、「throwInterrupt()」メソッドは。
static private void throwInterrupt()
{
throw new System.Threading.ThreadInterruptedException();
}
って書きたいのが人情ってもんです。
これで、うまく動くならば、どんな例外も自由自在ですがな。
しかし、悲しいかな、これで、前項と同じ手順を踏むと。
てな、ダイアログが表示されて、うまく例外をキャッチできないのだ。
|
|