debug - mostrar mensaje en c#
¿Se puede ver el resultado de OutputDebugString en la ventana de resultados de Visual Studio? (3)
Cuando se realiza la depuración (Depuración => Iniciar la depuración F5), la configuración de Propiedades de Proyecto +, pestaña Depurar, marque "Habilitar depuración de código no administrado" funciona bien.
Cuando NO realiza la depuración (Depurar => Iniciar sin depurar CTRL + F5), debe utilizar DebugView desde la biblioteca SysInternals. Descargar DebugView para Windows v4.76
Estoy usando C # y Visual Studio 2010.
Cuando uso OutputDebugString
para escribir información de depuración, ¿debería aparecer en la ventana de resultados?
Puedo ver el resultado de OutputDebugString
en DebugView , pero pensé que lo vería en la ventana de resultados de Visual Studio. He buscado en el menú Herramientas ? Opciones ? Depuración General , y la salida NO se está redirigiendo a la ventana Inmediato. También he buscado en el menú Herramientas *? Opciones ? Depuración La ventana de salida y todos los ajustes de salida generales están configurados en "On". Finalmente, he usado la lista desplegable en la ventana de resultados para especificar que deberían aparecer los mensajes de depuración.
Si cambio el menú Herramientas *? Opciones ? Depuración General para redirigir la salida a la ventana Inmediato, los mensajes OutputDebugString
no aparecen en la ventana inmediata.
Aquí está mi programa de prueba completo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace OutputDebugString
{
class Program
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern void OutputDebugString(string message);
static void Main(string[] args)
{
Console.WriteLine("Main - Enter - Console.WriteLine");
Debug.WriteLine("Main - Enter - Debug.WriteLine");
OutputDebugString("Main - Enter - OutputDebugString");
OutputDebugString("Main - Exit - OutputDebugString");
Debug.WriteLine("Main - Exit - Debug.WriteLine");
Console.WriteLine("Main - Exit - Console.WriteLine");
}
}
}
Si ejecuto dentro del depurador, la salida Debug.WriteLine
se muestra en la ventana de salida, pero la salida OutputDebugString
no lo hace.
Si ejecuto desde una ventana de consola, tanto Debug.WriteLine
como OutputDebugString
aparecen en DebugView.
¿Por qué la salida OutputDebugString
nunca aparece en la ventana de salida?
En última instancia, mi intención no es escribir mucha salida de depuración con OutputDebugString
, sino que usaré System.Diagnostics o NLog o algo similar. Solo estoy tratando de averiguarlo, si configuro una plataforma de registro para escribir en OutputDebugString
, la salida será visible desde el depurador.
TraceSources
a mi programa original (no a la simple prueba anterior) que usa TraceSources
y TraceListeners
configurados a través del archivo app.config
. Si configuro los orígenes de rastreo para escribir en System.Diagnostics.DefaultTraceListener
(que está documentado como escrito en OutputDebugString
), la salida del origen de rastreo va a la ventana de depuración. Sin embargo, las líneas que escriben directamente con OutputDebugString
(como en mi ejemplo simple) NO van a la ventana de depuración. Además, si uso un TraceListener
diferente que escribe en OutputDebugString
(obtuve uno de Ukadc.Diagnostics en Codeplex), ese resultado NO va a la ventana de depuración.
Una nota sobre la escucha de seguimiento de Ukadc.Diagnostics ... Ukadc.Diagnostics contiene algunos escuchas de seguimiento que permiten el formateo personalizado de la salida (similar al formato que está disponible en log4net, NLog y LAB). Por lo tanto, con "solo" una dependencia de Ukadc.Diagnostics, se puede usar el registro de diagnóstico .NET "estándar", pero puedo obtener algunas funciones avanzadas (como el formato de salida) sin depender de una plataforma posiblemente mucho más grande. En este caso, podría usar Ukadc.Diagnostics OutputDebugStringTraceListener
para escribir la salida del registro en la ventana de depuración en el mismo formato (si se desea, o en un formato diferente) que sería si se escribiera en un archivo.
Tenga en cuenta que he visto estas preguntas, pero no proporcionaron una solución de trabajo:
Es posible que se muestre en la "Ventana inmediata" debido a una configuración:
- Vaya a Herramientas / Opciones / Depuración / General. Desmarque "Redirigir todo el texto de la ventana de salida a la ventana inmediata"
O algo así.
Me hiciste esta pregunta por un tiempo. ¡De ninguna manera! Camino.
Proyecto> Propiedades> pestaña Depurar, active la casilla de verificación "Habilitar depuración de código no administrado". Renombrado a "Habilitar depuración de código nativo" en versiones posteriores de VS. Con el motor de depuración de código no administrado habilitado, la salida de OutputDebugString () ahora se intercepta correctamente y se dirige a la ventana de salida.