GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo diagnostico errores de corrupción de montón en Windows?

La solución de @Carlos es perfecta para problemas más pequeños. Pero para problemas grandes, la desaceleración resultante a veces es algo que no se puede digerir.

En este caso, uno puede colocar

ASSERT(_CrtCheckMemory()); 

en algún lugar del código, donde uno sospecha que el problema ya está presente. Este comando verifica el montón en (y solo en) el lugar donde se inserta, y no después de cada new o delete llamar como en el caso de _CRTDBG_CHECK_ALWAYS_DF . Esto mantiene el tiempo de ejecución razonable, en comparación con la opción _CRTDBG_CHECK_ALWAYS_DF .

Uno puede encontrar la línea de código problemática con bastante rapidez utilizando un tipo de enfoque de búsqueda binaria para colocar las afirmaciones.

Sin embargo, a veces _CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF) y/o _CrtCheckMemory() no son capaces de detectar problemas. Luego usando gflags es otra posibilidad, que puede mostrar dónde ocurre la corrupción del montón. En pocas palabras:

  • habilitar el montón de páginas (normalmente necesitarás privilegios de administrador ), por ejemplo:
    "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe" /p /enable <full_path_to_exe_to_debug.exe> /full 
    
    habrá un informe, ese montón comprueba exe_to_debug.exe fueron activados.
  • ejecutar el programa en el depurador. Accesos fuera de los límites, lo que corrompería el plomo del montón ahora para acceder a la violación y se ven fácilmente en el depurador.
  • deshabilitar el montón de páginas una vez que se haya realizado la depuración, por ejemplo:
    "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe" /p /disable <full_path_to_exe_to_debug.exe>
    
  • los programas con verificación de pila activada se pueden enumerar a través de
    "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe" /p
    

Use el montón de depuración y llámelo desde el principio en main().

_CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF);

Ralentizará mucho el programa, pero debería romperse tan pronto como ocurra la corrupción.

Consulte este artículo para obtener más detalles:https://msdn.microsoft.com/en-us/library/974tc9t1.aspx#BKMK_Check_for_heap_integrity_and_memory_leaks


Linux
  1. Cómo instalar Vim (vi) en Windows 10

  2. Linux – ¿Cómo desinstalar Grub?

  3. Cómo ejecutar chkdsk en Windows

  4. ¿Cómo convertir un archivo ejecutable de Linux (binario) a un archivo exe de Windows?

  5. ¿Cómo puedo ejecutar un ejecutable de Windows desde WSL (Ubuntu) Bash?

Cómo ejecutar Podman en Windows

Cómo convertir un archivo de Windows a un archivo UNIX

Cómo arreglar las actualizaciones de Windows atascadas en 0%

Cómo instalar Hyper-V en Windows 10 21H

Cómo revertir una actualización de Windows

¿Cómo instalar Wine en Ubuntu?