Окно разборки VS показывает весь EXE-файл? - PullRequest
2 голосов
/ 30 января 2009

Клиент запускает программу моей компании и останавливается до того, как что-то получится. Они отправили эту информацию из журнала событий 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 около позиции паузы или что-то в этом роде? Мне трудно посмотреть, сколько на самом деле разбирается, потому что полоса прокрутки не работает полностью. (Я не могу взять и переместить позицию прокрутки; мне нужно прокручивать строку или страницу.)

Спасибо за ваше понимание!

Ответы [ 3 ]

2 голосов
/ 30 января 2009

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

2 голосов
/ 30 января 2009

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

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

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

1 голос
/ 30 января 2009

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

Как говорит Фредрик, WinDbg также может помочь, особенно если вы можете получить аварийный дамп с ПК вашего клиента.

...