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のダイアログが出ない場合がある。そのまま処理が止まってタイムアウト頻発してて、何が原因かわかるまで苦労した……。