Domanda

Voglio essere in grado di vedere un timbro di tempo all'inizio di ogni traccia nella finestra di debug in Visual Studio.

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

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

Esempio di questa è l'applicazione Sysinternals - DebugView . Il problema è che non posso avere il debug di Visual Studio, e l'ascolto con DebugView allo stesso tempo, e io non sono confortevoli, con l'aggiunta manualmente il timestamp ai miei traccianti.

È stato utile?

Soluzione

Dato che il testo della finestra di uscita è di sola lettura, una volta scritte, non c'è un modo semplice per fare esattamente quello che vuoi fare. Tuttavia, è facile fare qualcosa di simile: aggiungere una linea di timestamp dopo il nuovo testo viene scritto nella finestra di output. Questo renderà la finestra di uscita molto più disordinato, ma si otterrà il timing.

Ecco come questo dovrebbe funzionare: In primo luogo, creare un Visual Studio Add-in o macro che aggancia il PaneUpdated caso di riquadro attivo della finestra di Outlook. (Vedi questa discussione per quanto per fare questo con un approccio macro). Assicurati di controllare, nel gestore eventi, che pane.Name == "Debug" e ignorare altri riquadri. In secondo luogo, quando si rileva il nuovo testo nel riquadro output di debug, aggiungere una linea di timestamp, in questo modo:

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");
}

E 'anche possibile pre-pend un timestamp per ogni linea, ma è molto più difficile. Non è possibile modificare il testo già nella finestra di output (è di sola lettura), ma è possibile cancellare la finestra e si può aggiungere del testo. Così si potrebbe utilizzare lo stesso approccio gestore di eventi sopra per rilevare modifiche al testo, ma invece di aggiungere si potrebbe copiare il testo attuale, anteporre timestamp per tutte le linee che non hanno già timestamp, cancellare la finestra, e aggiungere nuovamente l'ormai -con-timestamp testo. Il problema di questo è la prestazione una volta che la finestra di output diventa grande. Così si sarebbe probabilmente necessario implementare una sorta di "stampaggio pigro" che fa il chiaro e inserire in background, al fine di evitare di uccidere il vostro IDE quando (come è comune) 100 di linee di output di debug vengono emessi in un breve periodo di tempo . Inoltre, quando si cancella e ri-aggiunge, se si sta attualmente selezionando il testo nella finestra di output, la selezione è perduto.

Personalmente, avevo appena fatto la cosa facile e aggiungere le righe timestamp, piuttosto che l'approccio più difficile pre-pend. Dal momento che roba alla fine della linea è difficile da vedere senza scrolling, probabilmente sarei assicurarsi che ci fosse una nuova riga prima del timestamp, quindi l'utente vedrebbe ogni partita di una o più linee di uscita seguite da una linea di timestamp.

E 'possibile che ci può essere un modo per agganciare la finestra di output prima della visualizzazione del testo, ma non riuscivo a trovare un tale punto di estensibilità nelle estensibilità API VS.

L'idea in più: si può sempre rotolare il proprio finestra degli strumenti, per esempio "Uscita di debug di Ivan", che ascolta gli eventi provenienti dalla finestra di uscita vera, e gli echi di nuove linee (con data e ora) per la propria finestra degli strumenti. Questo è probabilmente l'opzione più difficile, ma dovrebbe fare esattamente quello che vuoi.

Altri suggerimenti

per aggiungere una nuova risposta ad una ANTICA questione, c'è una caratteristica in strumenti di potere di produttività 2013 estensione e utensili elettrici produttività 2015 estensione che aggiungono un margine timestamp alla finestra di output, senza codice richiesto.

che stavo cercando la stessa funzionalità. Mio collega si avvicinò con la macro $TICK nel campo del messaggio, stampando la cpu 'corrente' zecche.

Date un'occhiata a questi suggerimenti da Simon Chapman , anche.

Ho voluto questa funzionalità anche, così alla fine ho scritto un'estensione di farlo (molto simile a Justin di Grant suggerito nella risposta accettata). Dopo averlo usato per un po ', ho deciso che i timestamp relativi erano ancora più utile per me durante il debug. Se la gente ha voluto timestamp assoluti, sono sicuro che potrei aggiungere che la funzionalità di nuovo in. In ogni caso, se siete interessati potete controllarli fuori a niahtextfilter.com .

E per mostrare i relativi timestamp in azione in una sessione di debug di Visual Studio: Niah Text Filter output di debug

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top