170 похожих чатов

Привет! Вопрос по отладке и отладочной информации. Приложение (тест) собрано с

помощью clang (10) с параметрами -ggdb -O0 -g -fno-omit-frame-pointer. Используется akrzemi1/optional.
Этот тест падает на невалидном доступе к optional, но никак не получается достать нормальный stacktrace. Вывод получается такой:

terminate called after throwing an instance of 'utility::bad_optional_access'
processAsUpdateResult 1 1 true
what(): bad optional access

Thread 1 "TestAccount" received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1 0x00007f0ca027f921 in __GI_abort () at abort.c:79
#2 0x00007f0ca0c72957 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3 0x00007f0ca0c78ae6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007f0ca0c78b21 in std::terminate() ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5 0x00007f0ca0c78da9 in __cxa_rethrow ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007f0ca28f685c in QTest::qRun() ()
from /usr/local/seraphim/3dparty/qt5.12.4/lib/libQt5Test.so.5
#7 0x00007f0ca28f5e9e in QTest::qExec(QObject*, int, char**) ()
from /usr/local/seraphim/3dparty/qt5.12.4/lib/libQt5Test.so.5
#8 0x000000000043cb7f in main (argc=1, argv=0x7fffc056b9c8)
at main.cpp:1114

Вопрос: чего не хватает для получаниия нормального трейса? Методом расстановки отладочного вывода я примерно узнал, в каком месте падает — между QTest::qRun и перед __cxa_rethrow должно быть ещё как минимум 4 фрейма — запускаемый тест и несколько вложенных getter'ов внутри.

У меня нет опыта работы с исключениями, но я догадываюсь, что проблема могла бы быть в каком-нибудь -fno-exception, из-за которого нет информации для разворачивания стека при исключении. Однако такого флага в вызове компилятора нет. Кроме названных флагов — только всякие -D.

3 ответов

11 просмотров

Пока кажется, что QTest сам ловит исключение, что-то с ним делает, а потом перебрасывает в другом месте.

Egor Suvorov
Пока кажется, что QTest сам ловит исключение, что-...

Исходники подтверждают: https://github.com/qt/qtbase/blob/f0f00dbd119e0169bc81aa761e4d548e4ecf2214/src/testlib/qtestcase.cpp#L1942-L1954 Как такое ловить — с ходу неясно, можно попробовать установить брейкпоинт на все вылетающие исключения при помощи catch throw и дальше как-то пофильтровать, но тут уже что-то gdb-специфичное. Возможно, есть какой-то стандартный qt'шный трюк.

Alexander- Автор вопроса
Egor Suvorov
Исходники подтверждают: https://github.com/qt/qtba...

🔥 большое спасибо! Наверно дальше я смогу доковырять. Я даже не думал, что так может быть.

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
Гляньте, че бывает: Сегодня по одному проекту одной вебстудии делал проект небольшой, на их хостинге. На Modx revo. В определенный момент , работая в админке, вдруг перестал р...
Artem
7
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
12
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Карта сайта