Почему иногда стек вызовов в дамп-файле выглядит некорректно? - PullRequest
0 голосов
/ 21 июля 2010

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

Ответы [ 3 ]

1 голос
/ 21 июля 2010

Две причины, по которым стек вызовов может выглядеть некорректно:

  1. Возможно, стек поврежден.Если стек был поврежден по какой-либо причине (например, из-за переполнения буфера, который был выделен в стеке), все кадры стека уничтожаются.Это делает невозможным вычисление списка абонентов.

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

0 голосов
/ 21 июля 2010

Если вы вызываете API-интерфейсы Windows, которые затем перезванивают вам в том же потоке (например, с помощью обработчиков сообщений Windows), операции в библиотеках DLL Windows нередко используют соглашения стека, которые отладчик не можетинтерпретировать.Не требуется, чтобы стек отслеживался все время во время выполнения функции / метода ac / c ++, связанные со стеком регистры можно повторно использовать для других целей, а стандартные места хранения информации о стеке можно игнорировать.Я часто вижу это в Windows.

0 голосов
/ 21 июля 2010

Если приложение зависало, а не зависало, попробуйте загрузить в windbg и запустите !analyze -v -hang или попробуйте использовать adplus в режиме зависания.Это пытается определить причину зависания, которое должно дать вам более значимый стек вызовов.Команда !locks также может быть полезна, если у вас есть тупик, показывая, что блокирует ресурс.

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