¿StackTrace de Exception en diferentes hilos?
-
05-07-2019 - |
Pregunta
Hay un constructor en StackTrace que toma una excepción como un argumento. Todo bien y bien, pero me di cuenta de que todos los demás constructores dicen que obtendrán el StackTrace del subproceso actual, pero que el constructor que toma la excepción no dice nada sobre eso excepto
El seguimiento de pila resultante describe la pila en el momento de la excepción.
Solo quiero estar seguro de que obtendré el StackTrace correcto de una excepción, incluso si creo el StackTrace en un hilo diferente en el que se creó la excepción cuando creo el StackTrace de una excepción en otro hilo.
¿Puede alguien confirmar?
Solución
Parece bastante fácil de intentar, a menos que me esté perdiendo algo. Esto imprime el rastro de pila correcto para mí.
static Exception threadEx;
static void Main()
{
Thread worker = new Thread(DoWork);
worker.Start();
worker.Join();
if (threadEx != null) {
StackTrace trace = new StackTrace(threadEx);
Console.WriteLine(trace);
}
}
static void DoWork()
{
try {
throw new Exception("Boom!");
}
catch (Exception ex) {
threadEx = ex;
}
}
Otros consejos
Creará el StackTrace para el hilo al que se llama (internamente, llama 'CaptureStackTrace' con el parámetro 'targetThread', que indica que se solicita el hilo actual). El único ctor que crea para otro hilo es el que toma una instancia de Thread.