Я пытаюсь отладить программу на Debian, созданную с помощью gcc/g++ (DEBUG=1
и NDEBUG
не определены). Я использую стороннюю библиотеку, и она также создана для отладки (DEBUG=1
, NDEBUG
undefined, плюс другие определения отладки). Библиотека состоит из 150 тысяч строк и полна утверждений. Это хорошо.
В моем коде есть ошибка, и сейчас я пытаюсь отладить SQL-запрос. Это вызывает срабатывание утверждения в сторонней библиотеке. Это нормально и в порядке вещей.
Однако это поведение, заданное Posix, приводит к сбою программы, когда в библиотеке срабатывает assert
. Это бесполезное поведение при отладке функции "отладки и диагностики". Это должно быть одно из самых глупых решений этого комитета, и неудивительно, что многие люди редко используют его во время разработки.
Я хочу изменить поведение таким образом, чтобы при срабатывании assert он поднимал SIGTRAP
, а не SIGABRT
. Я немного ограничен, потому что я не писал стороннюю библиотеку (в моем коде используется MY_ASSERT
, и он вызывает SIGTRAP
, поэтому я могу продолжать и наблюдать за отрицательными путями кода).
Я знаю, что могу установить или изменить обработчики сигналов через gdb, но gdb уже останавливается на SIGABRT
, прежде чем передать его программе и прервать. Я также попытался установить пользовательский обработчик сигнала SIGABRT
, который, похоже, не помогает, поскольку прерывание все еще происходит.
Как изменить поведение assert
, чтобы при отладке возникало SIGTRAP
?