Da un progetto diApplicazione console in Visual Studio , voglio riorientare uscita Console
s' alla finestra Output durante il debug.Redirect Console.Write ... Metodi per la finestra di uscita di Visual Studio durante il debug
risposta
Cambia il tipo di applicazione per Windows prima di debug. Senza la finestra della console, Console.WriteLine funziona come Trace.WriteLine. Non dimenticare di reimpostare l'applicazione sul tipo di console dopo il debug.
class DebugWriter : TextWriter
{
public override void WriteLine(string value)
{
Debug.WriteLine(value);
base.WriteLine(value);
}
public override void Write(string value)
{
Debug.Write(value);
base.Write(value);
}
public override Encoding Encoding
{
get { return Encoding.Unicode; }
}
}
class Program
{
static void Main(string[] args)
{
#if DEBUG
if (Debugger.IsAttached)
Console.SetOut(new DebugWriter());
#endif
Console.WriteLine("hi");
}
}
** nota che questo è approssimato insieme quasi a pseudo codice. funziona ma necessita di lavoro :) **
Il problema di questo approccio è 1) è basato su codice 2) l'output non è lo stesso, e 3) una finestra di console è ancora aperta. – AMissico
Come varia l'uscita? – dkackman
Non ricordo in particolare, ma mi mancavano nuove linee. Probabilmente perché utilizza Console.WriteLine(). – AMissico
Puoi cambiarlo in System.Diagnostics.Debug.Write();
Prova Trace.Write e utilizzare DebugView
In realtà, esiste un modo più semplice: nella finestra "Opzioni" di Visual Studio (dal menu Strumenti), andare su "Debug" quindi selezionare l'opzione "Reindirizza tutto il testo della finestra di output nella finestra immediata".
Questo non funziona affatto. –
ctrl-alt-I richiama la finestra intermedia, ma sì si mostra vuota. – barlop
Nota se si sta utilizzando il metodo di dkackman ma si desidera scrivere l'output sia alla finestra della console e la finestra di debug, quindi è possibile modificare leggermente il suo codice come questo:
class DebugWriter : TextWriter
{
//save static reference to stdOut
static TextWriter stdOut = Console.Out;
public override void WriteLine(string value)
{
Debug.WriteLine(value);
stdOut.WriteLine(value);
base.WriteLine(value);
}
public override void Write(string value)
{
Debug.Write(value);
stdOut.Write(value);
base.Write(value);
}
public override Encoding Encoding
{
get { return Encoding.Unicode; }
}
}
Ah, giusto. Sapevo che era qualcosa di facile. Devo averlo fatto almeno cinque volte. – AMissico
Ho dimenticato, Alex Farber, IL TUO ECCEZIONALE! – AMissico
Inoltre, non dimenticare di rimuovere il riferimento System.Windows.Forms che viene aggiunto quando si modifica il tipo di progetto. – AMissico