tipos - variables alfanumericas en c#
C#Cómo volcar todas las variables y valores actuales durante el tiempo de ejecución (6)
Creo que algún tipo de marco de registro le ayudaría a hacer eso ...
Revisa:
En mi lugar de trabajo usamos log4net que funciona bastante bien para nosotros.
Entonces, ¿cómo es posible que desees descargar todas las variables para un análisis posterior? ¿Ha considerado escribir primero su prueba de código para poder reducir su dependencia del depurador y tener una serie de pruebas automatizadas que verifiquen los valores por usted?
¿Hay bibliotecas incorporadas o de terceros que le permitan simplemente volcar todas las variables en la memoria durante el tiempo de ejecución? Lo que me gustaría es poder ver las variables y los valores actuales de forma similar a como se ven en un punto de ruptura y sobrevolando las variables, pero sin tener que detener la ejecución del programa (es decir, solo obtener una instantánea). Sería bueno si pudiera volcarlos en un archivo que luego pueda abrirse más tarde en un programa para obtener una buena interfaz de GUI para verlos, pero un simple volcado de archivos de texto sería suficiente.
En el pasado, he usado el generador de perfiles de YourKit .Net para perfilar las aplicaciones .Net.
Si bien solo lo he usado para conectarme personalmente con aplicaciones, la documentación de Instantáneas indica que tienen una API de Perfilador que se puede usar para volcar instantáneamente instantáneas para su revisión.
Código sabio esto parece ser tan simple como el siguiente:
Controller c = new Controller();
String snapshotPath = c.CaptureSnapshot();
Creo que luego puede cargar los archivos de instantáneas en la GUI de YourKit en una fecha posterior para revisarlos.
No me sorprendería si algunos de los otros perfiladores populares como JetBrains dotTrace Performance y RedGates ANTS Performance Profiler tengan API programáticas similares, pero no pude encontrar rápidamente documentación obvia en sus sitios web (y no quería ver sus seminarios web para encontrarlos). fuera si esta característica existía!)
No puedo pensar en una manera fácil de hacer esto de una manera genérica. Lo que podría funcionar es crear mediante programación un archivo de volcado de su proceso en ejecución. Puede hacer esto con P / Invoke a las rutinas dbghelp.dll o generar un proceso cdb.exe para crear el archivo de volcado. Una vez que tenga el archivo, puede abrirlo en un depurador para su posterior análisis utilizando SOS.dll con cdb.exe / windbg.exe , o incluso escribir una secuencia de comandos del depurador para volcar los datos que desea (en su mayoría) automáticamente.
Para esto puedes usar WMemoryProfiler para
- Obtener todos los objetos en todas las aplicaciones como una matriz de objetos
- Crea un volcado de memoria de tu propio proceso.
- Serializar objetos específicos al disco.
Por supuesto, para que esto ocurra, necesitas Windbg, pero el Api de WMemoryProfiler está totalmente administrado y básicamente puedes auto depurar tu proceso. La biblioteca se encarga de las rarezas habituales del depurador ya que envuelve Windbg en una biblioteca accesible y agradable.
El código a continuación obtiene todas las instancias de los objetos System.Threading.Thread en una matriz de objetos. De esta manera, puede escribir un visualizador para sus propios objetos de aplicación en tiempo de ejecución. La otra sobrecarga simplemente le da todos los objetos en todos los Dominios de Aplicación.
using (var debugger = new MdbEng())
{
var dummy = new Thread(() => {});
dummy.Name = "Dummy Thread";
// Get all thread objects in all AppDomains
var threads = debugger.GetObjects("System.Threading.Thread", true);
foreach (Thread t in threads)
{
Console.WriteLine("Managed thread {0} has Name {1}", t.ManagedThreadId, t.Name);
}
GC.KeepAlive(dummy);
}
Como se trata de una envoltura alrededor de Windbg, también puede crear un volcado de memoria sobre la marcha y luego cargar un volcado de memoria de su proceso para extraer datos de objetos para su visualización desde el volcado. Los perfiladores de memoria comercial (por ejemplo, MemoryProfiler de Scitech) emplean esta técnica desde hace años, pero es bastante lento cuando se tiene un volcado de memoria enorme, ya que también utilizan Windbg como analizador de volcados.
Puedes probar la herramienta Intellitrace que se proporciona con la versión definitiva de Visual Studio. Es lo que usted describe: registra lo que está sucediendo en su aplicación y le permite depurarla sin ejecutar su programa con el cursor sobre las variables y todas las demás ventanas de depuración para ayudarlo.