Apa cara yang tepat untuk menunjukkan penuh saya InnerException
.
Saya menemukan bahwa beberapa InnerExceptions saya memiliki yang lain InnerException
dan itu berjalan cukup dalam.
Apakah akan InnerException.ToString()
melakukan pekerjaan untuk saya atau apakah saya harus mengulang InnerExceptions
dan membangun String
dengan StringBuilder
?
c#
exception
inner-exception
Willem
sumber
sumber
Jawaban:
Anda cukup mencetak
exception.ToString()
- itu juga akan menyertakan teks lengkap untuk semuaInnerException
s bersarang .sumber
ToString
metode khusus untuk pengecualian dalam seperti yang dijelaskan dalam Mengapa System.Exception.ToString tidak memanggil virtual ToString untuk pengecualian dalam? .Gunakan saja
exception.ToString()
http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx
exception.ToString () juga akan memanggil .ToString () dengan pengecualian dalam pengecualian itu, dan seterusnya ...
sumber
Saya biasanya suka ini untuk menghilangkan sebagian besar kebisingan:
Sunting: Saya lupa tentang jawaban ini dan terkejut tidak ada yang menunjukkan bahwa Anda bisa melakukannya
sumber
error.GetBaseException()
. Saya percaya ini melakukan hal yang sama ...@ Jon menjawab adalah solusi terbaik ketika Anda ingin detail lengkap (semua pesan dan jejak stack) dan yang direkomendasikan.
Namun, mungkin ada kasus ketika Anda hanya ingin pesan dalam, dan untuk kasus ini saya menggunakan metode ekstensi berikut:
Saya sering menggunakan metode ini ketika saya memiliki pendengar yang berbeda untuk melacak dan masuk dan ingin memiliki pandangan yang berbeda pada mereka. Dengan cara itu saya dapat memiliki satu pendengar yang mengirimkan seluruh kesalahan dengan jejak stack melalui email ke tim pengembang untuk debug menggunakan
.ToString()
metode dan yang menulis log pada file dengan sejarah semua kesalahan yang terjadi setiap hari tanpa jejak stack dengan yang.GetFullMessage()
metode.sumber
ex
aAggregateException
, tidak ada pengecualian dalam yang akan dimasukkan dalam output iniUntuk mencetak
Message
bagian dari pengecualian yang cukup dalam, Anda dapat melakukan sesuatu seperti ini:Ini secara rekursif melewati semua pengecualian dalam (termasuk kasus
AggregateException
s) untuk mencetak semuaMessage
properti yang terkandung di dalamnya, dibatasi oleh jeda baris.Misalnya
Anda perlu mendengarkan properti Pengecualian lainnya untuk detail lebih lanjut. Misalnya
Data
akan memiliki beberapa informasi. Anda bisa melakukannya:Untuk mendapatkan semua properti turunan (bukan pada
Exception
kelas dasar ), Anda bisa melakukan:sumber
IEnumerable<Exception>
alih-alih pengkodean kerasAggregrateException
untuk menangani jenis serupa lainnya. Juga kecualikanp.IsSpecialName
danpi.GetIndexParameters().Length != 0
untuk menghindari masalah. Memasukkan nama tipe pengecualian dalam output juga merupakan ide bagusSaya lakukan:
Ini "cetakan cantik" semua pengecualian batin dan juga menangani Agregat Eksepsi dan kasus di mana InnerException. Pesan sama dengan Pesan
sumber
Jika Anda ingin informasi tentang semua pengecualian, gunakan
exception.ToString()
. Itu akan mengumpulkan data dari semua pengecualian dalam.Jika Anda hanya menginginkan pengecualian asli, gunakan
exception.GetBaseException().ToString()
. Ini akan memberi Anda pengecualian pertama, mis. Pengecualian batin terdalam atau pengecualian saat ini jika tidak ada pengecualian batin.Contoh:
sumber
penumpukan pada jawaban nawfal.
ketika menggunakan jawabannya ada variabel aggrEx yang hilang, saya menambahkannya.
mengajukan ExceptionExtenstions.class:
sumber
e.StackTrace == null