Просмотр регистров в аварийном дампе - PullRequest
1 голос
/ 11 декабря 2008

Есть ли способ просмотреть содержимое регистра в каждом кадре стека в аварийном дампе? Окно регистров, кажется, содержит регистры, когда возникла исключительная ситуация, но было бы полезно видеть их содержимое в каждом кадре стека.

Ответы [ 4 ]

2 голосов
/ 25 декабря 2008

В зависимости от соглашения о вызовах, вы можете получить некоторые из регистров, которые сохраняются в стеке. Например, в соглашении о вызовах cdecl все регистры, кроме EAX, ECX и EDX, должны быть сохранены либо вызывающим, либо вызывающим. Эти три регистра могут быть закрыты, поэтому вы, как правило, не сможете получить их значения выше в стеке вызовов. Если функция не использует регистр, который должен быть сохранен, она не будет его сохранять, но, поскольку она не использует его, этот регистр имеет то же значение в следующем кадре более высокого стека.

1 голос
/ 11 декабря 2008

Проведя некоторое исследование и немного подумав об этом, я понял, что это, вероятно, невозможно. Мини-дамп сбоя сохраняет определенные области памяти процесса (в зависимости от флагов, переданных функции MiniDumpWriteDump ()) и достаточное количество информации о состоянии для воссоздания среды, в которой произошел сбой в отладчике. Он не имеет состояния процессора в каждой инструкции или даже в каждом кадре стека, он знает только о состоянии процессора, когда произошло исключение.

0 голосов
/ 29 сентября 2009

В оптимизированных сборках верно, что некоторая информация в стеке может быть отброшена, однако вы можете попросить отладчик попытаться показать вам информацию для данного стекового кадра. Сначала выполните «kn», чтобы увидеть стек с номерами кадров, затем попробуйте «.frame /c [frame]» или «.frame /r [frame]».

Обратитесь за помощью (".hh") для получения дополнительной информации.

0 голосов
/ 25 декабря 2008

Я не думаю, что вы можете получить это либо при отладке. Единственное значение, которое вы можете получить из регистров, это их значение в текущей инструкции.

...