У меня очень странная проблема, которая заняла у меня уже несколько часов:
При неправильном вводе программного обеспечения, над которым я работаю, я могу выдать исключение (которое, конечно, предназначено),Это работает нормально, и я вижу правильное сообщение об ошибке при выполнении программы.Но когда я передаю точно такой же ввод через API (который дает почти тот же поток управления), программа падает.С отладкой я вижу следующее (я использую gdb для отладки):
- Класс Exception (в данном случае называется UserExcption, и этот класс не имеет виртуальных методов, а также его предшественники не имеют никаких виртуальных методов) успешно создается.
- Когда я перехожу "в оператор throw" (хочу сказать, что я просто продолжаю шаг после создания экземпляра объекта исключения), я получаю следующий вывод:
(gdb) s
Чистый виртуальный метод называется
Программа получила сигнал SIGABRT, прервано.
0x00007fff95c64ce2 в __pthread_kill ()
(GDB)
Я действительно не понимаю, что здесь происходит.Поскольку сейчас задействованы виртуальные методы (насколько я вижу), я также не могу представить, что есть какие-то висячие указатели или что-то вроде этого (в противном случае я ожидал бы получить исключение нулевого указателя).Поскольку вся программа довольно большая, и я понятия не имею, где искать проблему, я также не могу воспроизвести ее.
Кто-нибудь имеет представление о том, что может быть источником такого поведения?
Лучший Маркус