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。  このあと、実行を押すと、例外が発生しております。
「Visual Studio 2010」-「デバッグ」

4. throw ではダメ

 前述、「throwInterrupt()」メソッドは。

		static private void throwInterrupt()
		{
			throw new System.Threading.ThreadInterruptedException();
		}
 って書きたいのが人情ってもんです。  これで、うまく動くならば、どんな例外も自由自在ですがな。  しかし、悲しいかな、これで、前項と同じ手順を踏むと。
「Visual Studio 2010」-「ダイアログ」

 てな、ダイアログが表示されて、うまく例外をキャッチできないのだ。

AbemaTV 無料体験
それがだいじWi-Fi