У меня есть куча Console.WriteLines в моем коде, который я могу наблюдать во время выполнения. Я общаюсь с родной библиотекой, которую я также написал.
Я хотел бы вставить некоторый printf в родную библиотеку и наблюдать за ними. Однако я не вижу их во время выполнения.
Я создал запутанное приложение hello world, чтобы продемонстрировать свою проблему. Когда приложение запускается, я могу отлаживаться в родной библиотеке и видеть, что вызван мир приветствия. Однако выход никогда не приземляется в текстовом редакторе. Обратите внимание: если один и тот же код запускается как консольное приложение, все работает нормально.
С#:
[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();
}
и нативная часть:
__declspec(dllexport) void Test()
{
printf("Hello World");
}
Обновление:
hamishmcn ниже начал говорить о сборке отладки/выпуска. Я удалил собственный вызов в вышеуказанном методе button1_click
и просто заменил его стандартным вызовом Console.WriteLine
.net. Когда я компилировал и запускал это в режиме отладки, сообщения перенаправлялись в выходной файл. Когда я переключился в режим выпуска, но вызовы не были перенаправлены. Перенаправление консоли работает только в режиме отладки. Как мне обойти это?