Apakah ada cara untuk menempatkan arloji pada variabel dan hanya memiliki Visual Studio istirahat ketika nilai itu berubah?
Itu akan membuatnya jauh lebih mudah untuk menemukan masalah negara yang rumit.
Bisakah ini dilakukan?
Kondisi breakpoint masih memerlukan set breakpoint, dan saya lebih suka mengatur arloji dan membiarkan Visual Studio mengatur breakpoint pada perubahan keadaan.
Jawaban:
Dalam menu Visual Studio 2005:
Debug -> Breakpoint Baru -> Breakpoint Data Baru
Memasukkan:
sumber
Anda juga dapat memilih untuk memecah secara eksplisit dalam kode:
Dari MSDN:
Tapi ini hanya mundur. Mengatur breakpoint bersyarat di Visual Studio, seperti yang dijelaskan dalam komentar lain, adalah pilihan yang lebih baik.
sumber
Posting yang sangat lama tetapi jika seseorang tidak mengetahui ...
Di Visual Studio 2015 , Anda dapat menempatkan breakpoint pada
set
accessor dari Properti yang Diimplementasikan Otomatis dan debugger akan rusak ketika properti diperbaruiMemperbarui
Kalau tidak; @AbdulRaufMujahid telah menunjukkan dalam komentar bahwa jika properti yang diimplementasikan otomatis berada pada satu baris, Anda dapat memposisikan kursor Anda di
get;
atauset;
dan menekanF9
dan breakpoint akan ditempatkan sesuai. Bagus!sumber
Bayangkan Anda memiliki kelas bernama A dengan deklarasi berikut.
Anda ingin program berhenti ketika seseorang mengubah nilai "m_value".
Pergi ke definisi kelas dan letakkan breakpoint di konstruktor A.
Setelah kami menghentikan program:
Debug -> Breakpoint Baru -> Breakpoint Data Baru ...
Alamat: & (ini-> m_value)
Byte Count: 4 (Karena int memiliki 4 byte)
Sekarang, kita dapat melanjutkan program. Debugger akan berhenti ketika nilainya diubah.
Anda dapat melakukan hal yang sama dengan kelas bawaan atau kelas gabungan.
Alamat: & (ini-> m_a.m_value)
Jika Anda tidak tahu jumlah byte variabel yang ingin Anda periksa, Anda bisa menggunakan sizeof operator.
Sebagai contoh:
Jika Anda melihat "Panggilan tumpukan" Anda dapat melihat fungsi yang mengubah nilai variabel.
sumber
Ubah variabel menjadi properti dan tambahkan breakpoint dalam metode yang ditetapkan. Contoh:
sumber
Jika Anda menggunakan WPF, ada alat yang luar biasa: WPF Inspector .
Ini melekat pada aplikasi WPF dan menampilkan pohon kontrol penuh dengan semua properti, yang memungkinkan Anda (di antara hal-hal lain) untuk memecah perubahan properti.
Tetapi sayangnya saya tidak menemukan alat yang memungkinkan Anda melakukan hal yang sama dengan properti atau variabel APA SAJA.
sumber
Saya ingat cara Anda menggambarkannya menggunakan Visual Basic 6.0 . Di Visual Studio, satu-satunya cara yang saya temukan sejauh ini adalah dengan menentukan kondisi breakpoint .
sumber
Klik kanan pada breakpoint berfungsi dengan baik untuk saya (meskipun sebagian besar saya menggunakannya untuk breakpoint bersyarat pada nilai variabel tertentu. Bahkan memecah ekspresi yang melibatkan karya nama thread yang sangat berguna jika Anda mencoba untuk menemukan masalah threading).
sumber
Seperti yang ditulis Peter Mortensen:
Informasi tambahan:
Jelas, sistem harus tahu alamat mana dalam memori yang harus ditonton. Jadi - atur breakpoint normal ke inisialisasi
myVariable
(ataumyClass.m_Variable
) - jalankan sistem dan tunggu sampai berhenti pada breakpoint itu. - Sekarang entri Menu diaktifkan, dan Anda dapat menonton variabel dengan memasukkan&myVariable
, atau instance dengan memasukkan&myClass.m_Variable
. Sekarang alamatnya sudah didefinisikan dengan baik.Maaf ketika saya melakukan kesalahan dengan menjelaskan solusi yang sudah diberikan. Tetapi saya tidak bisa menambahkan komentar, dan ada beberapa komentar mengenai hal ini.
sumber
Anda dapat menggunakan titik pandang memori dalam kode yang tidak dikelola. Tidak yakin apakah ini tersedia dalam kode terkelola.
sumber
Anda mungkin dapat menggunakan fungsi DebugBreak () dengan cerdas .
sumber
myVariable
digunakan dan menyimpan nilainya setelah digunakan dalampreviousValue
variabel bantu , lalu panggil DebugBreak () ketikamyVariable!=previousValue
; maka Anda akan tahu di antara blok kode mana yangmyVariable
telah berubah. Tetapi saya setuju bahwa solusi AShelly adalah yang terbaik.Anda secara opsional dapat membebani operator = untuk variabel dan dapat menempatkan breakpoint di dalam fungsi kelebihan beban pada kondisi tertentu.
sumber
Pembaruan pada tahun 2019:
Ini sekarang secara resmi didukung di Visual Studio 2019 Pratinjau 2 untuk .Net Core 3.0 atau lebih tinggi. Tentu saja, Anda mungkin harus memikirkan risiko potensial menggunakan IDE versi Pratinjau. Saya membayangkan dalam waktu dekat ini akan dimasukkan dalam Visual Studio resmi.
https://blogs.msdn.microsoft.com/visualstudio/2019/02/12/break-when-value-changes-data-breakpoints-for-net-core-in-visual-studio-2019/
sumber