Получить любой номер строки std: logic_error - PullRequest
0 голосов
/ 25 марта 2012

Моя программа на C ++ завершается с std :: logic_error, и я хотел бы отследить исходную строку, которая ее вызвала.Как я могу это сделать?

TBH, я использую gdb, использую g ++ -g для добавления отладочной информации.Все, что я могу получить, это следующие сообщения:

Это приложение запросило среду выполнения, чтобы завершить его необычным способом.Пожалуйста, обратитесь в службу поддержки приложения для получения дополнительной информации.прекращение вызова после выброса экземпляра 'std :: logic_error' what (): basic_string :: _ S_construct null недопустимо

Catchpoint 1 (exception thrown), 0x0045ffa0 in __cxa_throw ()
(gdb) bt
#0  0x0045ffa0 in __cxa_throw ()
#1  0x004601e8 in std::__throw_logic_error(char const*) ()
#2  0x00502238 in typeinfo for std::__timepunct<wchar_t> ()
#3  0x004685f8 in std::runtime_error::what() const ()
#4  0x03210da8 in ?? ()
#5  0x002efbcc in ?? ()
#6  0x00468734 in std::domain_error::~domain_error() ()
#7  0x00000000 in ?? ()
(gdb)

Ответы [ 2 ]

2 голосов
/ 25 марта 2012

Вы используете отладчик.

Использование инструментов отладчика - очень важный навык для изучения скомпилированных языков, таких как C и C ++.

0 голосов
/ 25 марта 2012

Объекты исключений не несут никакой исходной информации.Тем не менее, они, надеюсь, содержат полезное сообщение, доступное с помощью члена what().Кроме этого вам придется использовать отладчик, позволяющий прерывать работу при возникновении исключений, или устанавливать точку останова в конструкторе std::logic_errorПока исключения являются исключительными, это работает хорошо.Это не слишком хорошо работает с исключениями бросания кода в неисключительных случаях.

...