Нехай адреса крешу буде CA. У загальному вигляді алгоритм виглядає так:

  1. Необхідно мати .map-файл, якщо його ще нема то створити. Для цього треба вибрати опцію Line Numbers Only для Debug Info у властивостях проекту. Також треба вказати ключі /MAPINFO:LINES та /MAPINFO:EXPORTS для лінкера. Проект треба перебілдити (вірніше перезібрати).
  2. У .map-файлі треба знайти Preferred load address (PLA).
  3. Далі знаходимо колонку Rva+Base і в ній шукаємо найбільшу адресу яка менша за адресу креша. Таким чином знаходимо ім’я файлу і методу де стався креш.
  4. У секції Line numbers для знайденого файлу шукаємо номер рядка найближчий до значення CA-PLA-0x1000.

Статті по темі:

 Timestamp is 4d2cf75d (Tue Jan 11 16:35:41 2011)

 Preferred load address is 00400000

Start         Length     Name                   Class
0001:00000000 00010000H .textbss                DATA
0002:00000000 000065ceH .text                   CODE
0002:000065d0 00001259H .text$x                 CODE
0003:00000000 00000104H .CRT$XCA                DATA
0003:00000104 00000104H .CRT$XCAA               DATA

  Address         Publics by Value              Rva+Base       Lib:Object

0000:00000000       ___safe_se_handler_count   00000000     <absolute>
0000:00000000       ___safe_se_handler_table   00000000     <absolute>
0000:00000000       ___ImageBase               00400000     <linker-defined>
0001:00000000       __enc$textbss$begin        00401000     <linker-defined>
0001:00010000       __enc$textbss$end          00411000     <linker-defined>
0002:00000740       _main                      00411740 f   test.obj
0002:00000790       ?test_string_assign@@YAXXZ 00411790 f   test.obj
0002:00000940       ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDI@Z 00411940 f i test.obj
0002:00000a10       ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ 00411a10 f i test.obj