Saya menggunakan Visual Studio 2010 dalam mode debug dan saya memiliki "mengoptimalkan kode" tidak dicentang. Saya tidak bisa menonton cepat (atau mengarahkan) variabel apa pun di debugger. Saya mendapatkan kesalahan ini "Tidak dapat mengevaluasi ekspresi karena kode metode saat ini dioptimalkan".
Bahkan baris seperti: int i = -3, melakukan pengamatan cepat pada saya, saya mendapatkan "Tidak dapat memperoleh nilai lokal atau argumen 'i' karena tidak tersedia di petunjuk instruksi ini, mungkin karena telah dioptimalkan jauh."
Tautan ini dirujuk dalam pertanyaan serupa tampaknya tidak berlaku.
Apakah ada pengaturan yang saya lewatkan?
c#
visual-studio
visual-studio-2010
Tony_Henrich
sumber
sumber
Jawaban:
Sementara proyek dalam mode debug, solusinya tidak. Ketika saya mengubahnya, itu berhasil.
sumber
Saya memiliki masalah ini ketika saya menggunakan VS 2010. Konfigurasi solusi saya telah (Debug) dipilih. Saya menyelesaikan ini dengan menghapus centang properti Kode Optimasi di bawah properti proyek. Project (Klik kanan) => Properties => Build (tab) => hapus centang kode Optimalkan
sumber
Sepertinya Anda sedang men-debug bangunan yang dioptimalkan / rilis, meskipun kotak yang dioptimalkan tidak dicentang. Hal yang dapat Anda coba adalah:
Jika Anda tidak dapat melihat item menu Modul di Debug -> menu Windows maka Anda mungkin perlu menambahkannya di menu "Kustomisasi ...".
sumber
Project.Web
memiliki Optimization unticked namun masih menunjukkan sebagai Optimized ketika saya melihat perakitan diDebug > Modules
:(Dalam VS2013 pergi ke: Alat -> Opsi -> Debugging -> Umum dan aktifkan 'Gunakan mode kompatibilitas terkelola'. Ini menonaktifkan perilaku evaluasi fungsi baru.
sumber
Cobalah untuk menjalankan dalam mode debug. Jika Anda menjalankan dalam mode rilis Anda akan mendapatkan pesan ini.
sumber
Situasi saya tidak tercakup oleh jawaban di atas. Saya menemukan yang berikut: Artikel MSDN pada threading yang menjelaskan bahwa ketika terjebak dalam beberapa operasi threading asli primitif, debugger tidak dapat mengakses data. Sebagai contoh, ketika utas sedang duduk di Task.Wait (), ini muncul.
sumber
Saya memiliki masalah yang sama. Tetapi dalam kasus saya,
Debuggable
atribut tersebut sulit dikodekan dalamAssemblyInfo.cs
file proyek saya dan karenanya tidak (over-) ditulis oleh kompilasi. Ini berhasil setelah menghapus garis yang menentukanDebuggable
atribut.sumber
Bagi saya itu terjadi di VS2017 dan VS2019. Itu berhenti terjadi setelah saya memilih opsi "Suppressed JIT optimization on load module".
sumber
Saya memiliki masalah yang sama di VS2008. Dalam kasus saya itu diselesaikan melalui solusi-rebuild.
sumber
Terlepas dari @ Kragen yang disebutkan, Jika Anda men-debug proyek web
tutup studio visual dan coba hapus file sementara di C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files
sumber
Satu hal lain yang dapat Anda lakukan adalah, buat file dengan nama yang sama dengan dll yang dioptimalkan tetapi dengan ekstensi ini dan tambahkan yang berikut ke dalamnya:
[.NET Framework Debugging Control]
GenerateTrackingInfo = 1
AllowOptimize = 0
Ini akan memberitahu JIT untuk tidak mengoptimalkan variabel Anda.
Perhatikan bahwa Anda masih membutuhkan pdb, sehingga Anda akan berakhir dengan sesuatu seperti ini: yourDll.dll yourDll.pdb yourDll.ini
Ini berfungsi khusus dengan baik dalam skenario ketika Anda tidak memiliki akses untuk membuat kembali dll dengan opsi debug.
http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx
sumber
Ketika Anda melihat pesan " Tidak dapat mengevaluasi ekspresi karena kode metode saat ini dioptimalkan. " Setelah mengeluarkan
Debugger.Break()
pernyataan, pastikan Anda menekan F10 untuk melangkah ke pernyataan berikutnya.Setelah melangkah ke pernyataan berikutnya, dan dengan asumsi Anda menjalankan Debug build, pesan ini akan hilang.
sumber
Mengenai masalah dengan properti "Optimalkan kode" yang TIDAK DIHAPUS namun kode masih dikompilasi sebagai dioptimalkan: Apa yang akhirnya membantu saya setelah mencoba semuanya memeriksa kotak centang "Aktifkan debug kode tidak dikelola" pada halaman pengaturan yang sama (Properti proyek - Debug). Itu tidak secara langsung berhubungan dengan optimasi kode, tetapi dengan ini diaktifkan, VS tidak lagi mengoptimalkan perpustakaan saya dan saya bisa men-debug.
sumber
Saya memiliki masalah yang sama saat men-debug perpustakaan kelas dari aplikasi web yang diuji. Saya merujuk versi rilis di testbed dan yang ditetapkan untuk dioptimalkan di properti perpustakaan kelas.
Hapus centang pada kotak centang optimalkan kode untuk versi rilis di properti pustaka kelas, tepat saat saya menulisnya, telah memecahkan masalah.
sumber
Saya menyadari ini adalah jawaban nanti, tetapi saya menemukan referensi lain tentang cara untuk mengatasi masalah ini yang mungkin dapat membantu orang lain di masa depan. Halaman web ini menjelaskan pengaturan variabel lingkungan (COMPLUS_ZapDisable = 1) yang mencegah pengoptimalan, setidaknya itu berlaku untuk saya! (Jangan lupa bagian kedua menonaktifkan proses hosting Visual Studio.) Dalam kasus saya, ini mungkin bahkan lebih relevan karena saya men-debug DLL eksternal melalui server simbol, tapi saya tidak yakin.
sumber
Saya punya masalah dengan proyek F # yang telah ada di sana-sini antara Visual Studio dan MonoDevelop, mungkin berasal dari yang terakhir (saya lupa). Dalam VS, kotak optimisasi tidak dicentang, namun optimisasi tampaknya terjadi sejauh menyangkut debugger.
Setelah membandingkan XML file proyek dengan file yang sehat, masalahnya jelas: proyek sehat memiliki
<optimize>false</optimize>
garis eksplisit , sedangkan yang buruk benar-benar hilang. VS jelas menyimpulkan dari ketiadaannya bahwa optimasi dinonaktifkan, sedangkan kompiler melakukan yang sebaliknya.Solusinya adalah menambahkan properti ini ke file proyek, dan memuat ulang.
sumber
Saya mulai menerima pesan ini ketika saya bermigrasi ke Visual Studio 2017. Tidak ada satu pun ide di halaman ini yang saya coba untuk saya. Pada posting lain saya menemukan saran ini dan TIDAK berfungsi - hapus:
... dari file AssemblyInfo Anda.
sumber
Saya memiliki masalah yang sama di VS 2010. Membersihkan dan membangun kembali solusi dan berhasil.
sumber
Komentar vickramds di atas, merujuk pada http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html , melakukannya untuk saya. Saya memeriksa semuanya - menghapus semua dll, file pdb dari folder bin lokal, Clean, Rebuild, membersihkan semua folder Temporary ASP.NET Files, memastikan flag TRACE / DEBUG diatur, memeriksa jalur DLL, dll.
Untuk meletakkannya agar tidak hilang, untuk proyek yang terkena:
Properti Proyek -> Build -> Advanced -> Info Debug: Lengkap.
Anda ingin memeriksa apakah Anda memiliki konfigurasi Debug yang dipilih sebelum Anda melakukan ini, kecuali tentu saja, Anda bermaksud sebaliknya.
sumber
Jika Anda mencoba men-debug proyek ASP.NET, pastikan properti Properties> Web> Server dropdown diatur ke "IIS Express" (selain memeriksa semua yang lain di sini).
sumber
Saya telah mencampur dll c ++ / cli mfc ekstensi, yang dioptimalkan bahkan jika konfigurasi debug (dilihat dari VS 2017 Modul jendela). Seperti jawaban sebelumnya menyarankan saya mengubah "Pada VS2013 pergi ke: Alat -> Pilihan -> Debugging -> Umum dan aktifkan 'Gunakan mode kompatibilitas terkelola'. Ini menonaktifkan perilaku evaluasi fungsi baru." Pengaturan itu juga ditemukan di VS 2017.
Tapi itu tidak cukup, jadi saya juga menyalin pengaturan UseDebugLibraries dari file proyek aplikasi MFC lain ke file proyek dll ekstensi.
Kemudian bangun kembali dan itu memperbaiki masalah.
sumber
Di Visual Studio 2012 mengaktifkan opsi " Dikelola " dari Alat> Debugging> Just-In-Time bekerja untuk saya.
sumber