problems with Console.SetOut in Release Mode?
- by Matt Jacobsen
i have a bunch of Console.WriteLines in my code that I can observe at runtime. I communicate with a native library that I also wrote.
I'd like to stick some printf's in the native library and observe them too. I don't see them at runtime however.
I've created a convoluted hello world app to demonstrate my problem. When the app runs, I can debug into the native library and see that the hello world is called. The output never lands in the textwriter though. Note that if the same code is run as a console app then everything works fine.
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();
}
and the native part:
__declspec(dllexport) void Test()
{
printf("Hello World");
}
Update:
hamishmcn below started talking about debug/release builds. I removed the native call in the above button1_click method and just replaced it with a standard Console.WriteLine .net call. When I compiled and ran this in debug mode the messages were redirected to the output file. When I switched to release mode however the calls weren't redirected. Console redirection only seems to work in debug mode. How do I get around this?