tengo un montón de Console.WriteLines en mi código que puedo observar en tiempo de ejecución. Me comunico con una biblioteca nativa que también escribí.problemas con Console.SetOut en modo de lanzamiento?
Me gustaría incluir algunos printf en la biblioteca nativa y observarlos también. Sin embargo, no los veo en tiempo de ejecución.
He creado una complicada aplicación hello world para demostrar mi problema. Cuando se ejecuta la aplicación, puedo depurar en la biblioteca nativa y ver que se llama el mundo hello. Sin embargo, la salida nunca cae en el texto. Tenga en cuenta que si el mismo código se ejecuta como una aplicación de consola, todo funciona bien.
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();
}
y la parte nativa:
__declspec(dllexport) void Test()
{
printf("Hello World");
}
Actualización: hamishmcn continuación comenzaron a hablar de depuración/versiones de lanzamiento. Eliminé la llamada nativa en el método button1_click
anterior y simplemente la reemplacé por una llamada estándar Console.WriteLine
.net. Cuando compilé y ejecuté esto en modo de depuración, los mensajes fueron redirigidos al archivo de salida. Cuando cambié al modo de liberación, sin embargo, las llamadas no fueron redirigidas. La redirección de consola solo parece funcionar en modo de depuración. ¿Cómo puedo evitar esto?
Sin respuesta, pero esta publicación http://stackoverflow.com/questions/2570001/allow-native-dll-to-output-stdout-stderr-in-c-console-application sugiere que debería funcionar bien. Hmm. Parece que stdout está redireccionando a otro lugar; ya sea eso o está siendo amortiguado. –
¿Cómo se está ejecutando/conectando a la biblioteca nativa? – chilltemp
Me he adjuntado al proceso a través de vs.net y también dejé que se ejecute en la consola, y no veo nada de la extensión nativa. También probé DbgView, que tampoco produce nada nativo, solo mis mensajes .net. –