Por ejemplo, en un lugar ...
//---------------a
try
{
// some network call
}
catch(WebException we)
{
throw new MyCustomException("some message ....", we);
}
... y en otro lugar ...
//--------------b
try
{
// invoke code above
}
catch(MyCustomException we)
{
Debug.Writeline(we.stacktrace); // <----------------
}
El stacktrace que imprimo, solo comienza de aab, no incluye el stacktrace interno de WebException.
¿Cómo puedo imprimir todo el stacktrace?

throw;en lugar dethrow new MyCustomException(...)si desea conservar (y generar) la pila de excepciones original.Respuestas:
Normalmente uso el método .ToString () en excepciones para presentar la información completa de la excepción (incluido el seguimiento de la pila interna) en el texto:
Salida de muestra:
fuente
ToStringmétodo e imprimen mensajes personalizados en lugar de la información completa (esta es una mala práctica de codificación, así que no haga eso, nunca)ToStringsiempre que estoy seguro de que no se sobrescribe, y uso las propiedades directamente de lo contrario (como la respuesta de Andrew Hare ).Usa una función como esta:
Entonces puedes llamarlo así:
fuente
ToString?1. Crear método: si pasa su excepción a la siguiente función, le dará todos los métodos y detalles que son los motivos de la excepción.
2. Llamar al método: puede llamar al método de esta manera.
3. Obtenga el resultado:
fuente
StringBuilderclass.