Здравствуйте, Kingofastellarwar, Вы писали:
K>Генерирую в релизе у юзеров в случае ошибки минидам через MiniDumpWriteDump и отправляю его себе для анализа
K>Но от полученых дампов толку мало, как минимум потому что стек не показывается по человечески.
K>Какие условия нужны чтобы таки его нормально посмтореть кроме того что нужно хранить у себя pdb`шники?
А у меня такой глупый вопрос?
Допустим, у меня есть код и получен бинарник из него, и соответсвенно pdb. Я гружу дамп студией, call stack и прочее показывает отлично.
Но если я перебилжу проект, НЕ поменяв код, то call stack и прочее уже не показывает (показывает какую-то чушь). Можно ли как-то сделать, чтобы показывала?
А из СВН исходники надо самому вытягивать требуемой ревизии или как? Т.е. вот пришел мне минидамп, грузим его в отладчик: симболсы мне выдаст символьный сервер, а исходники из СВН, которые соответствуют данному релизу, вручную надо забрать?
Здравствуйте, Аноним, Вы писали:
А>Допустим, у меня есть код и получен бинарник из него, и соответсвенно pdb. Я гружу дамп студией, call stack и прочее показывает отлично. А>Но если я перебилжу проект, НЕ поменяв код, то call stack и прочее уже не показывает (показывает какую-то чушь). Можно ли как-то сделать, чтобы показывала?
Бинарник и .pdb должны быть результатом того же билда, именно этот билд должен быть подписан и выдан пользователям и сохранён на своём сервере символов, чтобы при получении дампа дебаггер мог автоматически найти именно тот бинарник, который сошлётся на именно тот .pdb.
Ниже — как можно попытаться сделать воркэраунд на случаи, которых быть не должно.
Если .pdb соответствует .exe/.dll, но .dmp от другого .dll/.exe, будет различаться время линковки и чексумма. см. структуру MINIDUMP_MODULE в минидампе и соответствующие поля заголовка. Пропатчить проще минидамп, т.к. при патчинге .exe/.dll .pdb файл перестанет подходить.
Русский военный корабль идёт ко дну!
Re[3]: Бестолковый .dmp
От:
Аноним
Дата:
13.11.09 11:59
Оценка:
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, Аноним, Вы писали:
А>>Допустим, у меня есть код и получен бинарник из него, и соответсвенно pdb. Я гружу дамп студией, call stack и прочее показывает отлично. А>>Но если я перебилжу проект, НЕ поменяв код, то call stack и прочее уже не показывает (показывает какую-то чушь). Можно ли как-то сделать, чтобы показывала?
AG>Бинарник и .pdb должны быть результатом того же билда, именно этот билд должен быть подписан и выдан пользователям и сохранён на своём сервере символов, чтобы при получении дампа дебаггер мог автоматически найти именно тот бинарник, который сошлётся на именно тот .pdb.
AG>Ниже — как можно попытаться сделать воркэраунд на случаи, которых быть не должно.
AG> AG>http://www.debuginfo.com/tools/chkmatch.html — это если .dmp соответствует exe, но .pdb от другого .exe/.dll, чтобы пропатчить .pdb
AG>Если .pdb соответствует .exe/.dll, но .dmp от другого .dll/.exe, будет различаться время линковки и чексумма. см. структуру MINIDUMP_MODULE в минидампе и соответствующие поля заголовка. Пропатчить проще минидамп, т.к. при патчинге .exe/.dll .pdb файл перестанет подходить.
Спасибо, Александр.
Просто, как то глупо хранить у себя pdb-ник (которые и весят не кисло), если в любой момент можно вытащить тот же код из сорссейфа. Ну в общем, смысл ответа я понял, это так, лирическое отступление.
Здравствуйте, Аноним, Вы писали:
А>Просто, как то глупо хранить у себя pdb-ник (которые и весят не кисло), если в любой момент можно вытащить тот же код из сорссейфа.
Насчёт размера — не так уж и много. Тем более, хранить вечно нужно только билды, выданные пользователям.
Насчёт удобства вытащить — в Debug Tools for Windows есть как и утилита для загрузки .pdb на свой сервер символов, так и средства для интеграции с системами контроля версий. Т.е. по клику по .dmp файлу загружается .exe, по нему загружается нужный .pdb, по .pdb загружаются нужные исходники.
Тот же код не обязательно выдаст тот же бинарник. Возможно, компилятор, SDK или сторонние библиотеки будут другими. Надёжнее использовать тот же бинарник.
AG>Тот же код не обязательно выдаст тот же бинарник. Возможно, компилятор, SDK или сторонние библиотеки будут другими. Надёжнее использовать тот же бинарник.
и самое главное — другим будет таймстамп
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
AG>>Тот же код не обязательно выдаст тот же бинарник. Возможно, компилятор, SDK или сторонние библиотеки будут другими. Надёжнее использовать тот же бинарник. O>и самое главное — другим будет таймстамп
Да, я уже выше писал пр время линковки в MINIDUMP_MODULE .dmp и оно же в PE бинарника.
На самом деле, всё оно решается, если есть вероятность, что после форса матчинга всё подойдёт.
Заказчику как-то захотелось паковать бинарники UPX-ом. После упаковки меняется размер и чексумма и .pdb не подходит. Было придумано добавлять в сервер символов неупакованные бинарники, а пришедшие .dmp файлы патчить, чтобы они ссылались на неупакованные файлы, таблицу соответсвий этих полей хранить в папке с символами. Всё заработало, хоть закачика отговорить от UPX удалось.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, Kingofastellarwar, Вы писали:
K>Блин у меня ж одна дллка пакуется-шифруется
Вы таки покажите лог WinDbg или скриншот студии, или опишите что там, бо "стек не показывается по человечески" — не совсем понятно.
Модуль наверху стека виден? Если да, чей?
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, Kingofastellarwar, Вы писали:
K>>Блин у меня ж одна дллка пакуется-шифруется
AG>Вы таки покажите лог WinDbg или скриншот студии, или опишите что там, бо "стек не показывается по человечески" — не совсем понятно. AG>Модуль наверху стека виден? Если да, чей?
Ну например вот такое
>ntdll.dll!7c90eb94()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
dbghelp.dll!Win32LiveSystemProvider::OpenMapping()
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
>>ntdll.dll!7c90eb94() K> [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] K> dbghelp.dll!Win32LiveSystemProvider::OpenMapping()
полный лог плизз.
из того что вы написали могу предположить что вы забыли про .ecxr
Как много веселых ребят, и все делают велосипед...
Здравствуйте, Kingofastellarwar, Вы писали:
K>Здравствуйте, Alexander G, Вы писали:
AG>>Здравствуйте, Kingofastellarwar, Вы писали:
K>>>Блин у меня ж одна дллка пакуется-шифруется
AG>>Вы таки покажите лог WinDbg или скриншот студии, или опишите что там, бо "стек не показывается по человечески" — не совсем понятно. AG>>Модуль наверху стека виден? Если да, чей?
K>Ну например вот такое
>>ntdll.dll!7c90eb94() K> [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] K> dbghelp.dll!Win32LiveSystemProvider::OpenMapping()
Предполагаю, что сервер символов Майкрософт не испульзуется/недоступен, локально имеются .pdb от ntdll на своей машине и от dbghelp.dll, но не от ntdll.dll пользователя.
Здравствуйте, Alexander G, Вы писали:
AG>Предполагаю, что сервер символов Майкрософт не испульзуется/недоступен, локально имеются .pdb от ntdll на своей машине и от dbghelp.dll, но не от ntdll.dll пользователя.
Я настроил так, как описано в http://support.microsoft.com/kb/311503, символьный сервер чего-то закачал, в студии я поддержку включил, потому что windbg я не очень понимаю.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
AG>>Предполагаю, что сервер символов Майкрософт не испульзуется/недоступен, локально имеются .pdb от ntdll на своей машине и от dbghelp.dll, но не от ntdll.dll пользователя. K>Я настроил так, как описано в http://support.microsoft.com/kb/311503, символьный сервер чего-то закачал, в студии я поддержку включил, потому что windbg я не очень понимаю.
ну в студии я не очень понимаю
но судя по стеку кроме проблем с символами студия не переключилась на сохраненный exception context, что делает .ecxr в windbg. Поищите наверно гдето это должно быть там
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
AG>>>Предполагаю, что сервер символов Майкрософт не испульзуется/недоступен, локально имеются .pdb от ntdll на своей машине и от dbghelp.dll, но не от ntdll.dll пользователя. K>>Я настроил так, как описано в http://support.microsoft.com/kb/311503, символьный сервер чего-то закачал, в студии я поддержку включил, потому что windbg я не очень понимаю. O>ну в студии я не очень понимаю O>но судя по стеку кроме проблем с символами студия не переключилась на сохраненный exception context, что делает .ecxr в windbg. Поищите наверно гдето это должно быть там
Только что сделал такую штуку: открыл дмп , а в настройках символьного сервера нажал еще раз загрузить символы и стек поменялся на
_KiFastSystemCallRet@0()
мало, но уже лучше
а вот символы моих дллек тупо не хотят грузиться, хотя прописал прямой путь к ним в настройках...
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
K>а вот символы моих дллек тупо не хотят грузиться, хотя прописал прямой путь к ним в настройках...
Загрузил и символы, оказыается кроме символов нужны еще и сами бинарники...нафига?...
Но стек всё равно их одной строчки
_KiFastSystemCallRet@0()
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
K>>а вот символы моих дллек тупо не хотят грузиться, хотя прописал прямой путь к ним в настройках...
K>Загрузил и символы, оказыается кроме символов нужны еще и сами бинарники...нафига?...
K>Но стек всё равно их одной строчки K>_KiFastSystemCallRet@0()
Все до мои до единого дампы имеют такой стек....что за фигня такая?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
3. Бинарники должны располагаться по тем путям, по которым они были запущены у юзера (изврат!!!!)
4. Если не предавать EXCEPTION_INFO, то стека нам не увидеть.
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, Kingofastellarwar, Вы писали: K>Итаг: K>3. Бинарники должны располагаться по тем путям, по которым они были запущены у юзера (изврат!!!!)
хм. у меня это не так. ничего не путаешь?