Показывает ли окно VS disassembly весь EXE-файл целиком?

StackOverflow https://stackoverflow.com/questions/493534

  •  20-08-2019
  •  | 
  •  

Вопрос

Клиент запускает программу моей компании, и она останавливается, прежде чем что-либо получит.Они отправили эту информацию из журнала событий Windows:

faulting module program.exe, version 1.2.3.4, fault address 0x00054321.

Нам больше нечем заняться, поэтому в качестве последней попытки я попытался посмотреть, смогу ли я найти, где находится эта позиция в дизассемблере.Я запускаю программу через Visual Studio, приостанавливаю ее, смотрю на окно дизассемблирования и пытаюсь прокрутить до этого адреса, но все, что я получаю там, это:

00054321  ???              
00054322  ???              
00054323  ???              
00054324  ???              
00054325  ???              
00054326  ???              
00054327  ???              
00054328  ???              
00054329  ???              
0005432A  ???              

Может ли это быть связано с тем, что Visual Studio разбирает только часть EXE-файла рядом с позицией pause или что-то в этом роде?Мне трудно просмотреть, сколько на самом деле разобрано, потому что полоса прокрутки работает не полностью.(Я не могу захватить и переместить положение прокрутки;Я должен прокручивать строку или страницу.)

Спасибо за любую информацию, которая у вас может быть!

Это было полезно?

Решение

Адрес ошибки также может быть вызван проблемой повреждения стека, т.е.обратный адрес мог быть скомпрометирован и возвращен на неправильный адрес @ 0x54321.Кроме того, в зависимости от используемой технологии (Java, .NET) код может изменять свою позицию между запусками.

Visual Studio выполняет разборку всего пространства процесса.????означает, что позиция недоступна.

Вам лучше бы понадобился фрейм стека, чтобы увидеть, что происходит, из дампа ядра.

Другие советы

WinDbg может быть вашим другом здесь, туда вы можете загрузить свой исполняемый файл и символы (.pdb), если сможете получить (мини) дамп, как говорит QbProg, это определенно облегчит поиск.Но у меня был опыт, когда это было проще делать в WinDbg.

Что вы ожидаете увидеть в окне разборки?Такой подход не сработает.Если вы в состоянии перестроить точно такую же конфигурацию сборки, что и у вашего клиента, то вы можете включить /КАРТА опция в настройках ссылок проекта.Это создаст файл, который сопоставляет символы адресам и позволит вам увидеть, какая функция выполнялась, когда произошел сбой.Возможно, вам придется выполнить небольшие вычисления, чтобы сместить необработанный сопоставленный адрес с адресом, по которому модуль был загружен на КОМПЬЮТЕР клиента.

Как говорит Фредрик, WinDbg тоже может помочь, особенно если вы можете получить аварийный дамп с КОМПЬЮТЕРА вашего клиента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top