GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendiagnosis kesalahan tumpukan korupsi pada Windows?

Solusi @Carlos sangat cocok untuk masalah yang lebih kecil. Namun untuk masalah besar, pelambatan yang dihasilkan terkadang merupakan sesuatu yang tidak dapat Anda terima.

Dalam hal ini, seseorang dapat menempatkan

ASSERT(_CrtCheckMemory()); 

di suatu tempat dalam kode, di mana orang menduga masalah sudah ada. Perintah ini memeriksa heap di (dan hanya di) tempat yang disisipkan, dan tidak setelah setiap new atau delete panggilan seperti dalam kasus _CRTDBG_CHECK_ALWAYS_DF . Ini menjaga waktu eksekusi tetap masuk akal, dibandingkan dengan opsi _CRTDBG_CHECK_ALWAYS_DF .

Seseorang dapat menemukan baris kode yang bermasalah dengan cukup cepat menggunakan pendekatan pencarian biner untuk menempatkan penegasan.

Namun, terkadang _CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF) dan/atau _CrtCheckMemory() tidak dapat mendeteksi masalah. Kemudian gunakan gflags adalah kemungkinan lain, yang mampu menunjukkan di mana tumpukan-korupsi terjadi. Singkatnya:

  • aktifkan heap halaman (biasanya Anda memerlukan hak istimewa admin ), mis.:
    "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe" /p /enable <full_path_to_exe_to_debug.exe> /full 
    
    akan ada laporan, bahwa heap memeriksa exe_to_debug.exe telah diaktifkan.
  • jalankan program di debugger. Mengakses di luar batas, yang akan merusak heap sekarang menyebabkan pelanggaran akses dan mudah dilihat di debugger.
  • nonaktifkan heap halaman setelah proses debug selesai, mis.:
    "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe" /p /disable <full_path_to_exe_to_debug.exe>
    
  • program dengan pemeriksaan heap yang diaktifkan dapat dicantumkan melalui
    "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe" /p
    

Gunakan heap debug dan panggil ini di awal main().

_CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF);

Ini akan sangat memperlambat program tetapi harus segera berhenti setelah korupsi terjadi.

Lihat artikel ini untuk detailnya:https://msdn.microsoft.com/en-us/library/974tc9t1.aspx#BKMK_Check_for_heap_integrity_and_memory_leaks


Linux
  1. Cara menginstal Vim (vi) di Windows 10

  2. Bagaimana cara mengubah file yang dapat dieksekusi linux (biner) ke file windows exe?

  3. Cara menginstal InfluxDB di Windows

  1. Linux – Bagaimana Cara Menghapus Instalasi Grub?

  2. Cara menjalankan chkdsk di Windows

  3. Bagaimana saya bisa menjalankan Windows yang dapat dieksekusi dari WSL (Ubuntu) Bash

  1. Cara Menginstal Python 3 di Windows 10

  2. Cara Menghasilkan Kunci SSH di Windows 10

  3. Cara Menggunakan Telnet Di Windows