#cpp #linux
На целевой системе программа вылетает при некоторых входных данных с exit кодом 134 (SIGABORT). Возможности запустить под отладчиком нет. Каким образом (кроме пристального изучения кода) найти место (функцию, в идеале callstack), где сработал вызов abort()? В исходниках прямого вызова abort() нет. Вывод backtrace_symbols_fd в обработчике сигнала показывает цепочку вызовов начиная с abort() (внутри стандартной библиотеки), кончая обработчиком сигнала (вызовы, предшествующие abort() отсутствуют).
Ответы
Ответ 1
Методом деления отрезка пополам. Вполне серьёзно. Занимаюсь разработкой реал-тайм систем, в которых никакие отладчики использовать невозможно. Поэтому, когда возникает такая ситуация, поступаю следующим образом: Пытаюсь понять хотя бы, в какой функции происходит прерывание. Делю текст функции на 10 (ориентировочно) частей с помощью операторов вида printf("01\n"); - printf("10\n"); Запускаю программу, получаю локализацию в первом приближении. Полученный отрезок делю опять, пока не дохожу до интервала в одну строку исходного текста. Обычно на это хватает 2-3 итерации.
Комментариев нет:
Отправить комментарий