Saya ingin menambahkan beberapa kode C # "hanya debug" yang hanya berjalan jika orang yang men-debug memintanya. Di C ++, saya biasa melakukan sesuatu yang mirip dengan berikut ini:
void foo()
{
// ...
#ifdef DEBUG
static bool s_bDoDebugOnlyCode = false;
if (s_bDoDebugOnlyCode)
{
// Debug only code here gets executed when the person debugging
// manually sets the bool above to true. It then stays for the rest
// of the session until they set it to false.
}
#endif
// ...
}
Saya tidak bisa melakukan hal yang sama di C # karena tidak ada statika lokal.
Pertanyaan : Apa cara terbaik untuk mencapai ini di C #?
- Haruskah saya menggunakan bidang statis kelas privat dengan arahan preprocessor C # (
#if/#endif DEBUG
)? - Haruskah saya menggunakan atribut Conditional (untuk menyimpan kode), dan kemudian bidang statis kelas privat ( tidak dikelilingi oleh arahan preprocessor C #
#if/#endif DEBUG
?). - Sesuatu yang lain?
sumber
Apa yang Anda cari adalah
[ConditionalAttribute("DEBUG")]
atribut.
Jika Anda misalnya menulis metode seperti:
[ConditionalAttribute("DEBUG")] public static void MyLovelyDebugInfoMethod(string message) { Console.WriteLine("This message was brought to you by your debugger : "); Console.WriteLine(message); }
panggilan apa pun yang Anda lakukan ke metode ini di dalam kode Anda sendiri hanya akan dijalankan dalam mode debug. Jika Anda membangun proyek Anda dalam mode rilis, bahkan panggilan ke "MyLovelyDebugInfoMethod" akan diabaikan dan dibuang dari biner Anda.
Oh dan satu hal lagi jika Anda mencoba untuk menentukan apakah kode Anda saat ini sedang di-debug atau tidak pada saat eksekusi, Anda juga dapat memeriksa apakah proses saat ini terkait dengan JIT. Tapi ini semua adalah kasus lain. Kirim komentar jika ini yang Anda coba lakukan.
sumber
Anda dapat mencoba ini jika Anda hanya memerlukan kode untuk dijalankan saat Anda memiliki debugger yang terpasang ke proses tersebut.
if (Debugger.IsAttached) { // do some stuff here }
sumber
Saya pikir mungkin perlu disebutkan bahwa
[ConditionalAttribute]
ada diSystem.Diagnostics;
namespace. Saya sedikit tersandung ketika saya mendapat:Error 2 The type or namespace name 'ConditionalAttribute' could not be found (are you missing a using directive or an assembly reference?)
setelah menggunakannya untuk pertama kali (saya pikir itu akan masuk
System
).sumber
Jika Anda ingin tahu apakah debugging, di mana-mana dalam program. Gunakan ini.
Deklarasikan variabel global.
bool isDebug=false;
Buat fungsi untuk memeriksa mode debug
[ConditionalAttribute("DEBUG")] public static void isDebugging() { isDebug = true; }
Dalam metode inisialisasi, panggil fungsi
Sekarang di seluruh program. Anda dapat memeriksa debugging dan melakukan operasi. Semoga ini membantu!
sumber