GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu diagnostikovat chyby poškození haldy v systému Windows?

Řešení @Carlos's je ideální pro menší problémy. Ale u velkých problémů je výsledné zpomalení někdy něco, co nemůžete strávit.

V tomto případě lze umístit

ASSERT(_CrtCheckMemory()); 

někde v kódu, kde se předpokládá, že problém již existuje. Tento příkaz kontroluje haldu na (a pouze na) místě, kde je vložen, a ne po každém new nebo delete volání jako v případě _CRTDBG_CHECK_ALWAYS_DF . To udržuje dobu provádění přiměřenou ve srovnání s volbou _CRTDBG_CHECK_ALWAYS_DF .

Problematický řádek kódu lze najít velmi rychle pomocí přístupu binárního vyhledávání pro umístění argumentů.

Někdy však _CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF) a/nebo _CrtCheckMemory() neumí odhalit problémy. Poté pomocí gflags je další možnost, která je schopna ukázat, kde dochází ke hromadění korupce. Stručně řečeno:

  • povolit hromadu stránek (obvykle budete potřebovat oprávnění správce ), např.:
    "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe" /p /enable <full_path_to_exe_to_debug.exe> /full 
    
    objeví se zpráva, že hromada kontroluje exe_to_debug.exe byly aktivovány.
  • spusťte program v ladicím programu. Přístupy mimo meze, které by poškodily haldu, nyní vedou k narušení přístupu a jsou snadno viditelné v ladicím programu.
  • po dokončení ladění deaktivovat hromadu stránek, např.:
    "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe" /p /disable <full_path_to_exe_to_debug.exe>
    
  • Programy s aktivovanou kontrolou haldy lze zobrazit pomocí
    "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe" /p
    

Použijte haldu ladění a zavolejte to úplně na začátku v main().

_CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF);

Velmi to zpomalí program, ale měl by se přerušit, jakmile dojde k poškození.

Podrobnosti naleznete v tomto článku:https://msdn.microsoft.com/en-us/library/974tc9t1.aspx#BKMK_Check_for_heap_integrity_and_memory_leaks


Linux
  1. Linux – Jak odinstalovat Grub?

  2. Jak převést linuxový spustitelný soubor (binární) na soubor Windows exe?

  3. Jak nainstalovat InfluxDB ve Windows

  1. Jak nainstalovat Vim (vi) na Windows 10

  2. Jak spustit chkdsk ve Windows

  3. Jak mohu spustit spustitelný soubor Windows z WSL (Ubuntu) Bash

  1. Jak nainstalovat Python 3 na Windows 10

  2. Jak vygenerovat klíč SSH ve Windows 10

  3. Jak používat Telnet ve Windows