2012-05-10 5 views
9

Debug.AssertはMetroアプリケーションでは起動しませんが、ConsoleやWinFormのような従来のプロジェクトの場合は起動します。そして、はい、私はデバッグモードです。Debug.Assert(false)はwin8メトロアプリケーションでは起動しません

Visual Studio(11 Beta)で正しく設定されていませんか?またはDebug.Assertはメトロアプリで無効にする予定ですか?

メトロアプリの実行中に多くの例外が飲み込まれていることは知っていますが、Debug.Assertはとても便利なので、なぜ無効にするべきなのか考えることはできません。

答えて

2

:のようなもの。デバッガを中断させて自動車運転を続けさせるかどうかを尋ねるように促すメッセージは表示されません。

DefaultTraceListener.AssertUIEnabledプロパティはfalseです。これは実装上の問題です.Meter UIの上にメッセージボックスを表示することはできません。実際には動作しますが、モニターはデスクトップに切り替わります。いいえをクリックしてやりたいと思っていたら、やり直しリストには疑いの余地はありません。あなたはそれを真に設定するプロパティに簡単にアクセスすることはできません、それはメタデータからアクセスできません。フィリップの回避策は半分くらいの音です。

+0

この投稿は現在のバージョンのメトロより前に作成されていたかもしれませんが、DefaultTraceListenerはメトロアプリのためにもう存在しないようです。 – James

+0

@James - これは "メタデータからアクセスできない"という意味です。 VS2010 RCではまったく同じように誤作動します。これはあなた自身で試してみるのが簡単です。回答をdownvoteする前にしてください。 –

+0

これを試してみましたが、DefaultTraceListener.AssertUIEnabledは存在しないためコードに設定できません。 – James

6

バグのようです。私は自分のアサートメソッドを展開します。それはトリガー、出力ウィンドウに見えるん

[Conditional("DEBUG")] 
public static void Assert(bool condition) 
{ 
    if (!condition) 
     System.Diagnostics.Debugger.Break(); 
} 
+0

私のために働きます:) – kennyzx

0

WinRTのVS2013のF#と同じ問題があります。 System.Diagnostics.Debug.Assertのエイリアスであるassertステートメントは例外を発生させないため、出力ウィンドウを見ていなければ、アサーションは気付かれることなく失敗する可能性があります。あなたが見ていても、アサーションが発生した場所を見つけるのは難しいです。

私はフィリップの提案に従い、以下のように、短いユーティリティを書いた:

namespace MyProj.Infrastructure 

module Diagnostics = 

    let Assert condition = if not condition then 
           System.Diagnostics.Debugger.Break() 

それは、アサーションが失敗した場所でデバッガを停止するため、私は例外を発生させる上でDebugger.Breakを選びました。しかし、例外を提起することは容認できる選択肢です。

私のソリューションには、適切なグローバルプロジェクトやモジュールがありませんでした。そのために作成しなければなりませんでしたが、非常に面倒でした。

関連する問題