Вопрос к тем кто знает как показать стек вызовов функций в DLL
Иногда можно увидеть информацию в окне с ошибкой.
1) Встроенным в компилятор С++ отладчиком. Самый лучший способ, особенно если есть исходники;
2) Внешним дизассемблером-отладчиком, например, W32DASM, если есть только двоичный файл длл.
В обоих случаях к тестируемой длл надо приаттачить МТ в качестве запускающего приложения.
Геморрой это довольно серьезный, к тому же требует определенных навыков, поэтому лучше всего пожужжать логически.
Дело в том что падает длл не сразу а по прошествии времени. отладчиком не отладишь пошагово.
Простого рецепта нет, но последовательность действий такая: ловишь SEH, берешь значение ebp из EXCEPTION_POINTERS::ContextRecord и начинаешь раскручивать стек фрейм за фреймом. Потом показываешь собранный список адресов функций.
Все конечно зависит от конкретной задачи, но для моей сгодилось.
Я сначала написал приложение которе делает с длл все тоже что должен делать эксперт... отладил, и львиная доля глюков ушла.
Простого рецепта нет, но последовательность действий такая: ловишь SEH, берешь значение ebp из EXCEPTION_POINTERS::ContextRecord и начинаешь раскручивать стек фрейм за фреймом. Потом показываешь собранный список адресов функций.
Да я что то глянул на этот SEH замудрённо там с этими фремами. Можеть быть смоешь выложить пример как ты раскручиваешь стек просматривая фреймы?
Да я что то глянул на этот SEH замудрённо там с этими фремами. Можеть быть смоешь выложить пример как ты раскручиваешь стек просматривая фреймы?
У меня падает терминал из-за моей DLL, которая вызывается из скрипта. Хочу локализовать место падения в моей DLL. Может быть кто-нибудь подскажет как узнать в программе последовательность вызова функций до момента "падения" терминала. Есть структурная обработка исключений SEH в win32 и я только знаю как узнать где в конкретной функции упала программа но не знаю как раскрутить всю цепчку вызова функций.
Хочу обойтись без логирования в файл в каждой функции.