Misalnya, di satu tempat ...
//---------------a
try
{
// some network call
}
catch(WebException we)
{
throw new MyCustomException("some message ....", we);
}
... dan di tempat lain ...
//--------------b
try
{
// invoke code above
}
catch(MyCustomException we)
{
Debug.Writeline(we.stacktrace); // <----------------
}
Stacktrace yang saya cetak, hanya mulai dari a hingga b, tidak menyertakan stacktrace dalam dari WebException.
Bagaimana cara mencetak semua stacktrace ???
throw;
sebagai penggantithrow new MyCustomException(...)
jika Anda ingin mempertahankan (dan mengeluarkan) tumpukan pengecualian asli.Jawaban:
Saya biasanya menggunakan metode .ToString () pada pengecualian untuk menyajikan informasi pengecualian lengkap (termasuk jejak tumpukan dalam) dalam teks:
Output sampel:
sumber
ToString
metode dan mencetak pesan khusus alih-alih informasi lengkap (ini adalah praktik pengkodean yang buruk, jadi jangan pernah melakukannya)ToString
setiap kali saya yakin itu tidak ditimpa, dan menggunakan properti secara langsung sebaliknya (seperti jawaban Andrew Hare ).Gunakan fungsi seperti ini:
Kemudian Anda bisa menyebutnya seperti ini:
sumber
ToString
?1. Buat Metode: Jika Anda meneruskan pengecualian Anda ke fungsi berikut, ini akan memberi Anda semua metode dan detail yang menjadi alasan pengecualian.
2. Metode Panggilan: Anda dapat memanggil metode seperti ini.
3. Dapatkan Hasilnya:
sumber
StringBuilder
kelas.