2016-04-23 14 views
2

LINQPadでは、System.Diagnostics名前空間のとTrace.Assert()が期待どおりに動作しません。 のために設定されているメッセージボックスをポップアップするのではなく、単に "Fail:"または "Fehler:"を出力ウィンドウに表示して、プログラムを気楽に続けることができます。言い換えれば、騒々しい、無視できない爆発の代わりに、テキストの出力に「失敗:」を散らす、目に見えないマイクロファットしかありません。LINQPad:アサート()が "失敗:"を出力し、破損する代わりに続行します。

Assert()をLINQPadでデフォルトの動作に戻す方法はありますか?

Trace.Assert()を偽装するという簡単な方法があります。その結果、騒々しい爆発(例外、メッセージボックスなど)が発生し、失敗の原因が行番号などの形で特定されます。

私の単体テストはTrace.Assert()に基づいています。これは、その機能が失敗した時点でプログラムを中断できない場合、それらを完全に無駄にします。

Visual Studioでは、すべて正常に動作しますが、LINQPadでは動作しません。私はシステム全体の設定を手こずっぱりにしていませんが、ある時点でMonoをインストールしました。私は細かい櫛でLINQPadのすべての設定を行ったが、役に立たない。 LINQPadのバージョンは4.57.02(無料)で、Windows 7 Pro(ドイツ語)とWindows 8.1 Pro(英語)で動作します。

私は高いと広い検索しましたが、私は見つけることができる唯一のことは、トピックTrace.Assert not breaking, neither showing the message boxここにスタックオーバーフローです。そのタイトルは確かに有望に見えますが、その答えはありません。

P.S:私はLINQスクリプトに

class Trace 
{ 
    public static void Assert (bool condition) 
    { 
     if (!condition) 
      throw new Exception("FAIL!"); 
    } 
} 

を追加し、throwの文にブレークポイントを設定することでからかってみました。 LINQPadのデバッガで関連するコールスタックエントリをクリックすると関連するソース行に移動するので、このような仕組みになります。しかし、私はthrowにブレークポイントを設定する代わりに、ソースコードから直接デバッガを呼び出すFoxProのSET DEBUG ONに相当するものを見つけることができませんでした。

+1

( 'Util.Breakをお試しください); 'デバッガを直接呼び出す。 – sgmoore

+0

@sgmoore:ありがとう、とても便利です! – DarthGizka

答えて

7

質問の後半、例外がスローされたときにLINQPadデバッガがブレークするようになるかどうかは、ツールバーの[Bug]アイコンのいずれかをクリックすることです。

クリック未処理の例外がスローされるたびにクエリを中断させるために、例外が未処理のときに中断します。(赤いバグ)

クリック(青いバグ)は、例外がスローされるたびに、それが処理されるかどうかにかかわらず、クエリが中断するようにします。

LINQPadを右クリックし、をデフォルトのに設定して、デフォルトを設定することができます。 (これにより、デバッガは常にクエリにアタッチされ、パフォーマンスが低下します)。

Debug.Assert(false)には、この動作がLINQPadに実装されていないため、ダイアログが表示されません。あなたは私の拡張機能をするために、次のコードを追加することで、拡張機能としてこれを簡単に実現することができます。

public class NoisyTracer : TextWriterTraceListener 
{ 
    public static void Install() 
    { 
     Trace.Listeners.Clear(); 
     Trace.Listeners.Add (new NoisyTracer (Console.Out)); 
    } 

    public NoisyTracer (TextWriter writer) : base (writer) { } 

    public override void Fail (string message, string detailMessage) 
    { 
     base.Fail (message, detailMessage); 
     throw new Exception ("Trace failure: " + message); 
    } 
} 

を次に、以下のようにクエリを記述し、有効にする:

NoisyTracer.Install(); 
Debug.Assert (false); 
+1

ありがとう、それは素晴らしい - ちょうど医者が注文したもの! (と最後に説明された古い謎) – DarthGizka

関連する問題