Как найти код для сбоя - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть некоторый 64-битный код, который работает в режиме выпуска на сервере. На сервере нет Visual Studio, только на моей dev-машине. Эта программа была написана многими авторами (я последний), и некоторый код в ней мне еще не знаком, и она довольно большая.

Программа аварийно завершает работу с нулевым указателем. Инструкция по адресу 0xwh независимо (последний 0x40066c19) ссылается на память по адресу 0x00000000 - нажмите кнопку ОК, чтобы завершить программу. У меня есть все исходные файлы и файлы PDB для EXE, но когда я запускаю его и присоединяю процесс, память 0x40066c19 полностью вне диапазона. Есть только ?? в этой области. Как вы используете информацию о "инструкции в ..."?

В окне разборки отображается что-то вроде (пример) - но, как вы видите, просто слишком далеко от 00000001403CB888 до 0x40066c19

   if (LastKickIdle > GetTickCount()) 
00000001403CB882  call        qword ptr [__imp_GetTickCount (0140688310h)]  
00000001403CB888  cmp         dword ptr [LastKickIdle (0140888DF8h)],eax  
00000001403CB88E  ja          CMainDlg::OnKickIdle+281h (01403CBAB1h)  
        return 1;
    LastKickIdle = GetTickCount() + 500;
00000001403CB894  mov         qword ptr [__formal],rbx  
00000001403CB89C  call        qword ptr [__imp_GetTickCount (0140688310h)]  
00000001403CB8A2  add         eax,1F4h  
00000001403CB8A7  mov         dword ptr [LastKickIdle (0140888DF8h)],eax  

1 Ответ

0 голосов
/ 29 апреля 2018

Я сталкиваюсь с подобными ситуациями на работе. Я создал класс log, который принимает строковый аргумент и записывает его в файл с некоторой другой полезной информацией. Я делаю записи в начале методов или в тех местах, где, по моему мнению, что-то может быть или может быть проблематично. Благодаря этому я, по крайней мере, смог сузить свой поиск проблем.
Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...