VS2005 C#のDebug.Assert()とC++/CLIのDebug::Assert()

※ サンプルコードは http://d.hatena.ne.jp/gentle_jkov/20080302/1204476466 にあるものをまねさせてもらった。 ※

C++/CLIのDebug::Assert()のふるまいでめんどくさい目にあったので、その覚え書きを公開しておく。

C# での Debug::Assert() のふるまい。

int i = 0;
System.Diagnostics.Debug.Assert(++i == 1);
System.Diagnostics.Debug.Assert(++i == 1); // Debugビルドのときはassertに引っかかる。
Console.WriteLine("{0}", i);

C++/CLI での Debug::Assert() のふるまい。

int i = 0;
System::Diagnostics::Debug::Assert(++i == 1);
System::Diagnostics::Debug::Assert(++i == 1); // Debugビルド、Releaseビルドにかかわらず、assertに引っかかる。
Console::WriteLine("{0}", i);

コンパイラーがReleaseビルドでも、Assert()を消してくれない。

C++/CLIの場合は、Debug::Assert()は、

#ifdef DEBUG
#endif

でくくらないといけない。

これね、ヘルプファイルに書いてある。だから、きちんと読んでなかった自分が悪いんだけど……。もうちょい目に付きやすいところに書いてくれんものかなぁ、とは思う。

C++/CLIで作っているWebサービスなんかだと、設定によるものか、assertのダイアログが出ない場合がある。そのまま処理が止まってタイムアウト頻発してて、何が原因かわかるまで苦労した……。