我在我的代码中有很多Console.WriteLines,我可以在运行时观察它们。我还与一个我编写的本地库通信。
我想在本地库中添加一些printf并观察它们。然而,在运行时我看不到它们。
我创建了一个复杂的Hello World应用程序来演示我的问题。当应用程序运行时,我可以调试到本地库并看到Hello World被调用。然而输出永远不会出现在TextWriter里。请注意,如果以控制台应用程序的方式运行相同的代码,则一切正常工作。
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();
}
并且还有本地部分:
__declspec(dllexport) void Test()
{
printf("Hello World");
}
更新:
下方的hamishmcn开始谈论调试/发布构建。我从上面的button1_click
方法中删除了本机调用,并将其替换为标准的Console.WriteLine
.net调用。当我以调试模式编译并运行时,消息被重定向到输出文件。然而,当我切换到发布模式时,调用没有被重定向。控制台重定向似乎只在调试模式下起作用。我应该如何解决这个问题?