Вопрос к тем кто знает как показать стек вызовов функций в DLL

 
Знаю что этот сайт не программистов на C++. Но на форуме встречаются люди сведующие.
У меня падает терминал из-за моей DLL, которая вызывается из скрипта. Хочу локализовать место падения в моей DLL. Может быть кто-нибудь подскажет как узнать в программе последовательность вызова функций до момента "падения" терминала. Есть структурная обработка исключений SEH в win32 и я только знаю как узнать где в конкретной функции упала программа но не знаю как раскрутить всю цепчку вызова функций.
Хочу обойтись без логирования в файл в каждой функции.
 

Иногда можно увидеть информацию в окне с ошибкой.

 
В режиме пошагового выполнения:
1) Встроенным в компилятор С++ отладчиком. Самый лучший способ, особенно если есть исходники;
2) Внешним дизассемблером-отладчиком, например, W32DASM, если есть только двоичный файл длл.
В обоих случаях к тестируемой длл надо приаттачить МТ в качестве запускающего приложения.
Геморрой это довольно серьезный, к тому же требует определенных навыков, поэтому лучше всего пожужжать логически.
 

Дело в том что падает длл не сразу а по прошествии времени. отладчиком не отладишь пошагово.

 

Простого рецепта нет, но последовательность действий такая: ловишь SEH, берешь значение ebp из EXCEPTION_POINTERS::ContextRecord и начинаешь раскручивать стек фрейм за фреймом. Потом показываешь собранный список адресов функций.

 
Из личного опыта.

Все конечно зависит от конкретной задачи, но для моей сгодилось.

Я сначала написал приложение которе делает с длл все тоже что должен делать эксперт... отладил, и львиная доля глюков ушла.
 
bstone:

Простого рецепта нет, но последовательность действий такая: ловишь SEH, берешь значение ebp из EXCEPTION_POINTERS::ContextRecord и начинаешь раскручивать стек фрейм за фреймом. Потом показываешь собранный список адресов функций.


Да я что то глянул на этот SEH замудрённо там с этими фремами. Можеть быть смоешь выложить пример как ты раскручиваешь стек просматривая фреймы?
 
elritmo:

Да я что то глянул на этот SEH замудрённо там с этими фремами. Можеть быть смоешь выложить пример как ты раскручиваешь стек просматривая фреймы?
Если замудрено, то лучше не связываться.
 
Но вообще полезная штука. Попробую разобраться :) прсото подумал может у тебя етсь уже набор функций которые ты используешь для раскрутки стека вызовов функций и не жаль поделиться
Причина обращения: