Задать вопрос
Profi_GMan
@Profi_GMan

Как получить место, откуда выбрасывается sigsegv и ему подобные?

Доброго времени суток!
Я отлавливаю sigsegv и ему подобные с помощью SetUnhandledExceptionFilter() на винде.
И с помощью signal() на линукс.
Как я могу получить место, откуда вызывается исключение? И на вин, и на линуксе.
Спасибо!
  • Вопрос задан
  • 121 просмотр
Подписаться 2 Простой Комментировать
Решения вопроса 1
Profi_GMan
@Profi_GMan Автор вопроса
Для винды, чтобы узнать, шде произошло исключение, нужно:
1. Компилировать в режиме отладки
2. После выброса исключения создавать мини-дамп, который потом можно открыть с помощью windbg
Но у этого спомоба есть недостатки:
1. Если исключение произошло в библиотеке, то он скажет ту функцию, в которой произошло исключение, но не скажет, откуда эта функция была вызвана.
2. Если использовать qt, то придёться тащить с собоё пару сотен мигабайт длл библиотек, вместо пары десятков, ибо длл для отладки весят где-то в десять раз больше
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
terrier
@terrier
Вам это для чего?
В случае linux:
Для анализа глазами постфактум - смотреть core dump с помощью gdb.
Пробовать делать что-то программно - используйте sigaction() вместо signal() и там вся информация доступная информация передается в параметре siginfo_t *info хэндлера
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы