9

Visual Studioのデバッグウィンドウで、すべてのトレースの先頭にタイムスタンプが表示されます。 のDebugView - 本のタイムスタンプを表示するVisual Studio 2008のデバッグウィンドウ?

[Time stamp here] The thread 'Win32 Thread' (0xcd0) has exited with code 0 (0x0). 

[Time stamp here] => CLR ProvideAssembly: AppDomainId: 1, Ref: 'msvcm90d... 

例Sysinternalsのアプリケーションです。問題は、私はVisual Studioのデバッグをすることができず、同時にDebugViewでリスニングすることができず、タイムスタンプをトレーサに手動で追加するのが快適ではないということです。

答えて

7

出力ウィンドウのテキストは一度しか読み込み専用ではないので、やりたいことを簡単に行うための簡単な方法はありません。しかし、同様のことをするのは簡単です。の後にタイムスタンプ行を追加すると、新しいテキストが出力ウィンドウに書き込まれます。これにより、出力ウィンドウがもっと乱雑になりますが、タイミングを取ることになります。

これはどのように動作するのですか?最初に、OutlookウィンドウのアクティブウィンドウのPaneUpdatedイベントをフックするVisual Studioアドインまたはマクロを作成します。 (これをマクロアプローチで行う方法は、this threadを参照してください)。イベントハンドラでは、pane.Name == "Debug"を確認し、他のペインは無視してください。第二に、あなたはこのように、タイムスタンプの行を追加し、デバッグ出力ウィンドウに新しいテキストを検出した場合:

public void AddTimestamp(DTE2 dte) 
{ 
    // Retrieve and show the Output window. 
    OutputWindow outWin = dte.ToolWindows.OutputWindow; 

    pane = outWin.OutputWindowPanes.Item("Debug"); 
    } 
    catch 
    { 
     pane = outWin.OutputWindowPanes.Add("Debug"); 
    } 

    pane.OutputString("[timestamp: " + DateTime.Now.ToString() + "]\n"); 
} 

それは各行にタイムスタンプを、保留に事前にすることも可能ですが、それは多くの困難です。アウトプットウィンドウ(すでに読み込み専用)にあるテキストは変更できませんが、ウィンドウをクリアしてテキストを追加することはできます。したがって、上記の同じイベントハンドラのアプローチを使用してテキストの変更を検出することができますが、現在のテキストをコピーして、タイムスタンプがない行にタイムスタンプを追加してから、ウィンドウをクリアしてから、 -with-timestampsテキスト。出力ウィンドウが大きくなると、この問題はパフォーマンスになります。だから、おそらく、あなたのIDEを殺すのを避けるために、バックグラウンドでクリアして挿入するような、ある種の「怠惰なスタンピング」を実装しなければならないでしょう。 。また、クリアして再追加するときに、現在出力ウィンドウでテキストを選択している場合、選択内容は失われます。

個人的には、難しいプリペンドのアプローチではなく、簡単なことを行い、タイムスタンプの行を追加します。行の最後にあるものはスクロールせずに見るのが難しいので、おそらくタイムスタンプの前に改行があることを確認すると、1つまたは複数の出力行の各バッチが1つのタイムスタンプ行に続いて表示されます。

テキストが表示される前に出力ウィンドウをフックする方法がある可能性がありますが、VS拡張機能APIでそのような拡張ポイントを見つけることができませんでした。

もう1つ考えてください。自分のツールウィンドウをいつでもロールすることができます。実際の出力ウィンドウからのイベントを待ち受けて、自分のツールウィンドウに新しい行(タイムスタンプ付き)をエコーする "Ivan's Debug Output"これはおそらく最も難しいオプションですが、あなたが望むものを正確に行うべきです。

+0

@Justin私もその拡張性を見ていました。線の長さが違っていて読みにくいので、線の終わりはあまり良くありません。窓の再塗装はあなたが言ったようにキラーです...あなたの答えをありがとう、しかし、私は実際には、たとえそのハックな場合でも、これを行う方法を探して探しています。 –

+0

ちょっと、行末の代わりに、追加専用の解決策を使うなら、新しい行にタイムスタンプを植えることをお勧めします。これは出力ウィンドウの行数を2倍にしますが、より良いです(IMHO)行末にタイムスタンプが埋め込まれているよりも、さらに、改行がドキュメントの中にすでに送られていて、コントロールを取得する前に、行末にテキストを配置することさえできない場合もあります。 –

+0

もう1つ考えてください。自分のツールウィンドウをいつでも動かすことができます。実際の出力ウィンドウからのイベントを待ち受けて、自分のツールウィンドウに新しい行(タイムスタンプ付き)をエコーする "Ivan's Debug Output"これはおそらく最も難しいオプションですが、あなたが望むものを正確に行うべきです。 –

2

私は同じ機能を探していました。同僚のメッセージフィールドの$TICKマクロが現れ、「現在の」CPUチックが表示されました。

these tips from Simon Chapmanもご覧ください。ANCIENT質問への新しい答えを追加する

関連する問題