А>Могу ли я как-то локализовать место в котором происходит падение, то есть узнать место в исходниках где драйвер падает? Или это можно сделать только при помощи Debug сборки драйвера?
В случае free-сборки .pdb-файл обычно не создаётся, но можно поступить так: сделать checked-сборку, получишь файл символов, затем делаешь free-сборку, а в случае падения кладёшь рядом файл символов от отладочной сборки и принудительно подгружаешь его в WinDbg, иногда помогает, только оптимизацию лучше отключить для free-сборки, если возможно.
Анализ minidump'ов
От:
Аноним
Дата:
27.11.12 18:16
Оценка:
Такой вопрос — есть собранный драйвер, собран в конфигурации Release, имеются к нему исходники. При некоторых обстоятельствах драйвер выдаёт BSOD (PAGE_FAULT_IN_NONPAGED_AREA), получаю minidump с машины. Могу ли я как-то локализовать место в котором происходит падение, то есть узнать место в исходниках где драйвер падает? Или это можно сделать только при помощи Debug сборки драйвера?
x64>В случае free-сборки .pdb-файл обычно не создаётся
а ?
dir xxx\objfre_wxp_x86\i386\*
...
xxx.sys
xxx.pdb
...
wdk7
ЧЯДНТ ?
pdb не содержит правда ссылок на сорец, но обычно этого и не нужно особо — достаточно знать имя ф-ции, все остальное можно детально посмотреть в ida pro
Здравствуйте, x64, Вы писали:
R>>ЧЯДНТ ? x64>Не знаю, может у меня со скриптом что-то не то, но у меня обычно не создаётся...
Зависит от WDK. В старых правильно отрабатывало и не создавался. В новых приходится makefile.new патчить, чтоб отключить его создание в релиз версии.
Без pdb можно той же идой вычислить где падает.
newbie
Re[5]: Анализ minidump'ов
От:
Аноним
Дата:
03.12.12 12:32
Оценка:
Здравствуйте, pva, Вы писали:
pva>Здравствуйте, x64, Вы писали:
R>>>ЧЯДНТ ? x64>>Не знаю, может у меня со скриптом что-то не то, но у меня обычно не создаётся... pva>Зависит от WDK. В старых правильно отрабатывало и не создавался. В новых приходится makefile.new патчить, чтоб отключить его создание в релиз версии. pva>Без pdb можно той же идой вычислить где падает.
Здравствуйте, okman, Вы писали:
O>Здравствуйте, pva, Вы писали:
pva>>Зависит от WDK. В старых правильно отрабатывало и не создавался.
O>Разве это правильно ? O>Кому мешает горстка pdb-шек где-то далеко на сервере разработчика программы ?
Полностью поддерживаю — не иметь pdb, тем более при разработке драйверов, это чисто самоубийство, и прямо скажем непрофессионализм. Как сказал один уважаемый человек — if you don't have a symbol server, you're not doing development.
Здравствуйте, okman, Вы писали:
O>Разве это правильно ? O>Кому мешает горстка pdb-шек где-то далеко на сервере разработчика программы ?
MS согласна с вами и поэтому отключила соответствующие макросы, вроде USE_PDB / TARGETPDB.
The USE_PDB macro is obsolete and must not be used. All binaries built by the Build utility are built with .pdb symbol files.
Так что теперь официальный посыл билдить все с отладочной инфой.
Здравствуйте, x64, Вы писали:
x64>В случае free-сборки .pdb-файл обычно не создаётся, но можно поступить так: сделать checked-сборку, получишь файл символов, затем делаешь free-сборку, а в случае падения кладёшь рядом файл символов от отладочной сборки и принудительно подгружаешь его в WinDbg, иногда помогает, только оптимизацию лучше отключить для free-сборки, если возможно.
Можно в makefile добавить опцию LINKER_FORCE_NO_DBG_SECTION=1 и тогда при free-сборке .pdb-файл создаётся. Если не ошибаюсь.
Здравствуйте, pva, Вы писали:
pva>Зависит от WDK. В старых правильно отрабатывало и не создавался. В новых приходится makefile.new патчить, чтоб отключить его создание в релиз версии.
Собираю драйвера с помощью ddkbuild, намучился с отключением генерации pdb в релизной версии драйверов. В итоге использую опцию /PDBALTPATH для опущения полного пути к символам.
Здравствуйте, x64, Вы писали:
А>>Могу ли я как-то локализовать место в котором происходит падение, то есть узнать место в исходниках где драйвер падает? Или это можно сделать только при помощи Debug сборки драйвера?
x64>В случае free-сборки .pdb-файл обычно не создаётся, но можно поступить так: сделать checked-сборку, получишь файл символов, затем делаешь free-сборку, а в случае падения кладёшь рядом файл символов от отладочной сборки и принудительно подгружаешь его в WinDbg, иногда помогает, только оптимизацию лучше отключить для free-сборки, если возможно.
бред какой-то, pdb от чекед для фри сборки будет бесполезен чуть менее чем полностью
Здравствуйте, Eugene Radius, Вы писали:
ER>Здравствуйте, pva, Вы писали:
pva>>Зависит от WDK. В старых правильно отрабатывало и не создавался. В новых приходится makefile.new патчить, чтоб отключить его создание в релиз версии.
ER>Собираю драйвера с помощью ddkbuild, намучился с отключением генерации pdb в релизной версии драйверов. В итоге использую опцию /PDBALTPATH для опущения полного пути к символам.
Здравствуйте, Eugene Radius, Вы писали:
ER>а зачем они нужны в релизной сборке? на моём опыте в них необходимости не возникало.
То есть, у вас все релизы на 100% лишены багов ??? Круто, тоже так хочу. Вот только реалии на самом деле не таковы, и рано или поздно жизнь своим суровым гаечным ключом по голове научит вас завести себе symbol server и хранить там все релизные pdb на случай, так сказать, ядерной войны — лично через это проходил и ни разу с тех пор не пожалел.