ho un sacco di Console.WriteLines nel mio codice che posso osservare in fase di esecuzione. Comunico con una libreria nativa che ho anche scritto.con Console.SetOut in modalità di rilascio?
Mi piacerebbe inserire alcuni printf nella libreria nativa e osservarli. Non li vedo comunque in fase di esecuzione.
Ho creato una complicata app ciao mondo per dimostrare il mio problema. Quando si esegue l'app, posso eseguire il debug nella libreria nativa e vedere che viene chiamato il mondo Hello. L'output non arriva mai nel textwriter però. Notare che se lo stesso codice viene eseguito come un'app console, allora tutto funziona correttamente.
C#:
[DllImport("native.dll")]
static extern void Test();
StreamWriter writer;
public Form1()
{
InitializeComponent();
writer = new StreamWriter(@"c:\output.txt");
writer.AutoFlush = true;
System.Console.SetOut(writer);
}
private void button1_Click(object sender, EventArgs e)
{
Test();
}
e la parte originaria:
__declspec(dllexport) void Test()
{
printf("Hello World");
}
Aggiornamento: hamishmcn seguito iniziato a parlare di debug/release build. Ho rimosso la chiamata nativa nel metodo button1_click
sopra riportato e l'ho appena sostituita con una chiamata .net standard Console.WriteLine
. Quando ho compilato e eseguito questo in modalità di debug, i messaggi sono stati reindirizzati al file di output. Quando sono passato alla modalità di rilascio, tuttavia, le chiamate non sono state reindirizzate. Il reindirizzamento della console sembra funzionare solo in modalità di debug. Come faccio a evitare questo?
Nessuna risposta, ma questo post http://stackoverflow.com/questions/2570001/allow-native-dll-to-output-stdout-stderr-in-c-console-application suggerisce che dovrebbe funzionare correttamente. Hmm. Sembra che stdout stia reindirizzando da qualche altra parte; o quello o è stato bufferizzato. –
Come si avvia/si collega alla libreria nativa? – chilltemp
Sono collegato al processo tramite vs.net e lo faccio semplicemente girare sulla console, e non vedo nulla dallo stdout nativo. Ho anche provato DbgView che non emette nulla di nativo, solo i miei messaggi .net. –