QT5 createPlatformIntegration() аварийно завершает работу при попытке создать QApplication, но только в отладчикеC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 QT5 createPlatformIntegration() аварийно завершает работу при попытке создать QApplication, но только в отладчике

Сообщение Anonymous »


Недавно я обновил свой образ WSL Ubuntu 20.04 с WSL1 до WSL2.

В WSL1 я мог прекрасно использовать отладчик QTCreator (обертку GDB). Но после обновления до WSL2 он теперь аварийно завершает работу, как только достигает конструктора QApplication().

Вот базовый пример сбоя:

#include "mainwindow.h" #include int main(int argc, char *argv[]) { QApplication a(argc, argv); Главное окно w; ш.шоу(); вернуть a.exec(); } Вот трассировка стека. Я установил пакет libqt5core5a-dbgsym, но, похоже, это не влияет на трассировку стека. Если вы знаете, как заставить символы отладки работать в этой среде без перекомпиляции всего QT, дайте мне знать!

Поток 1 (Поток 0x7ffff0b7bbc0 (LWP 31883)): #0 __GI_raise (sig=sig@entry=6) в ../sysdeps/unix/sysv/linux/raise.c:50 set = {__val = {0 , 228, 140737488338864, 140737488338864, 7758946189198844672}} pid = tid = ret = #1 0x00007ffff5397859 в __GI_abort() в abort.c:79 save_stage = 1 act = {__sigaction_handler = {sa_handler = 0x7ffffffc058, sa_sigaction = 0x7fffffffc058}, sa_mask = {__val = {140737488339488, 140737488339496, 140737354022076, 14073748833 8896, 140737354046956, 3, 140737312309764, 0, 7758946189198844672, 140737488339032, 140737322294875, 3, 140737488339032, 14 0737488339520, 140737312310041 , 0}}, sa_flags = 1318150912, sa_restorer = 0x7ffff61a1e5b} sigs = {__val = {32, 0 }} #2 0x00007ffff57ebaad в ?? () из /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 Информация о таблице символов отсутствует. #3 0x00007ffff5dcd7ae в QGuiApplicationPrivate::createPlatformIntegration() () из /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 Информация о таблице символов отсутствует. #4 0x00007ffff5dce708 в QGuiApplicationPrivate::createEventDispatcher() () из /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 Информация о таблице символов отсутствует. #5 0x00007ffff59f2f55 в ?? () из /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 Информация о таблице символов отсутствует. #6 0x00007ffff5dd0543 в QGuiApplicationPrivate::init() () из /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 Информация о таблице символов отсутствует. #7 0x00007ffff640b3bd в QApplicationPrivate::init() () из /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 Информация о таблице символов отсутствует. #8 0x000055555555917f в основном (argc=1, argv=0x7fffffffe718) в /mnt/c/source/myProject/main.cpp:105 RC = 0 a = args = {_vptr.CLfxArgs = 0x0, m_threads = 0, m_autoFile = {static null = {}, d = 0x0}, m_firstFile = {static null = {}, d = 0x0} , m_fragDir = {static null = {}, d = 0x0}, m_forceFirst = false, m_materialsDir = {static null = {}, d = 0x0}, m_meshFile = {static null = { }, d = 0x0}, m_vmFile = {static null = {}, d = 0x0}, m_logFile = {static null = {}, d = 0x0}, m_lfxLog = false, m_testNum = 0, m_iterNum = 0, m_batch = false, m_noInit = false, m_qstarFile = {static null = {}, d = 0x0}, m_fragFuncNum = 42076, m_workingDir = {static null = { }, d = 0x7ffff5582510}} пТест = 0x0 dAccumTime = 0 пакет = ложь szMsg = {static null = {}, d = 0x0} Запуск обычной отладочной сборки работает отлично, все ведет себя так, как ожидалось. Он вылетает только в отладчике.

РЕДАКТИРОВАТЬ: Если я прикреплю GDB к работающему процессу, я смогу легко пройти мимо конструктора QApplication. Если я попытаюсь нормально запустить приложение с помощью GDB, то получу ошибку, похожую на ту, которая возникает, если не удается найти X-сервер:

[Включена отладка потоков с использованием libthread_db] Использование хост-библиотеки libthread_db "/usr/lib/x86_64-linux-gnu/libthread_db.so.1". qt.qpa.xcb: не удалось подключиться для отображения локального хоста: 0 qt.qpa.plugin: Не удалось загрузить плагин платформы Qt «xcb» в «», хотя он был найден. Это приложение не удалось запустить, поскольку не удалось инициализировать плагин платформы Qt. Переустановка приложения может решить проблему. Доступные плагины платформы: eglfs, linuxfb,минимальный,минимальный,offscreen,vnc,xcb. Программа получила сигнал SIGABRT, прервана. __GI_raise (sig=sig@entry=6) по адресу ../sysdeps/unix/sysv/linux/raise.c:50 Я правильно экспортировал переменную DISPLAY на основе /etc/resolv.conf, которая работает для запуска QTCreator. Так почему GDB это не нравится, я не знаю.

Почему это может быть?
[*]Версия QT: 5.12.8 [*]Версия GCC: 9.2 (Ubuntu 9.2-0ubuntu1~20.04.1) [*]Ubuntu: 20.04. [*]QTCreator: 4.11.0
Текущий комплект:
Изображение

Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»