Я отлаживаю приложение и по какой-то причине (в чем я не совсем уверен) при закрытии приложения abort()
называется. Я хотел бы попытаться найти причину этого, поэтому я хочу установить точку останова на abort()
так что я могу увидеть трассировку стека и, надеюсь, выяснить причину, по которой он был вызван, вместо изящного выхода.
Я использую Microsoft Visual Studio 2012 (обновление 3) и имею объявление только для abort()
функция (в stdlib.h
) и поэтому я не могу установить точку останова. Есть ли способ обойти это?
Вам не нужно делать ничего особенного. abort
вызов из программы C / C ++, созданной Visual Studio, выдает следующее сообщение:
--------------------------- Библиотека отладки Microsoft Visual C ++ --------------------------- Ошибка отладки! Программа: ... R6010 - abort () был вызван (Нажмите «Повторить» для отладки приложения) --------------------------- Прервать Повторить Игнорировать ---------------------------
Нажатие «Повторить» открывает отладчик с полным стеком вызовов. Эта функциональность доступна как для конфигураций Debug, так и для Release, когда программа работает в автономном режиме и в режиме отладчика. В конфигурации выпуска диалоговое окно отличается, оно содержит кнопку «Разорвать», которая открывает отладчик, как «Повторить» в конфигурации отладки.
Просто для отладки, вы можете переопределить abort
Функция и установить точку останова внутри.
void abort()
{
std::cout << "aborting" << std::endl; // put break here...
exit(-1);
}
В случае Linux gdb
после удара abort
Вы можете легко увидеть трассировку стека с помощью команды bt
, Не нужно добавлять дополнительную точку останова.