Просмотр сообщений
|
Страниц: [1]
|
1
|
Qt / Многопоточное программирование, процессы / Re: Ошибка "Segmentation fault"
|
: Апрель 09, 2024, 16:52
|
Хорошо бы где-нибудь почитать про методы отладки в Qt - наработанные приемы, инструменты. Может, есть монография по этой теме?
О монографии не слышал. Кстати надо печатать и в конструкторе, возможна ABA. Вообще первое что нужно сделать - добиться стабильности краша, идеи/мысли для этого у Вас есть. Если стабильно летит - дальше уже "дело техники" и все такое. Самое мерзкое если появится так раз в месяц - и с приветом, вымотает все кишки
|
|
|
2
|
Qt / Многопоточное программирование, процессы / Re: Ошибка "Segmentation fault"
|
: Апрель 06, 2024, 13:37
|
Как же я смогу это сделать, если ~QModbusRtuClient уже исполнился, а краш происходит через несколько секунд?
напр так QModbusRtuClient::~QModbusRtuClient( void ) { printf("~QModbusRtuClient %p\n", this); } И при краше сравнить receiver c напечатанным. Но поздно - я уже все переделываю, не хочется возвращаться к проблеме, которая имеет чисто академический интерес))
Хорошо если так
|
|
|
4
|
Qt / Многопоточное программирование, процессы / Re: Ошибка "Segmentation fault"
|
: Апрель 04, 2024, 12:57
|
Для человека "вне (вашего) проекта" информативно это ...после чего сокетом формируется сигнал ошибки и отправляется уже удаленному modbusDevice. И программа валится.
И что, Qt позволяет вот так "отправить сигнал удаленному"? Не должно Тему закрываю.
Зачем? Кому-то мешает? Одна нормальная тема в год - и ту закрывает
|
|
|
5
|
Qt / Многопоточное программирование, процессы / Re: Ошибка "Segmentation fault"
|
: Апрель 04, 2024, 07:18
|
Вы, видимо имели в виду QObject::eventFilter? Я плохо разбираю феню кулхацкеров , не очень понял, как это реализовать. Напр так bool MyApp::notify(QObject *object, QEvent *event) { ... return QGUIApplication::notify(object, event); }
И пытаться как-то определить что поле QObjectPrivate * испорчено (ну хотя бы нечетный адрес). Придется подключить приватные хедеры. С удалением может быть и никак не связано, просто кто-то пишет не туда куда надо, и объект попадает под раздачу. Поэтому первым делом надо проверять кучу (средствами вашей IDE)
|
|
|
6
|
Qt / Многопоточное программирование, процессы / Re: Ошибка "Segmentation fault"
|
: Апрель 03, 2024, 08:00
|
Да, receiver выглядит калечным. Если он убит "хвостом", то куча испорчена. И может за это зацепиться // Qt enforces the rule that events can only be sent to objects in // the current thread, so receiver->d_func()->threadData is // equivalent to QThreadData::current(), just without the function // call overhead. Навесить хвильтр где сравнить receiver->d_func()->threadData и QThreadData::current(), получить там останов
|
|
|
7
|
Qt / Вопросы новичков / Re: как правильно работать с Qt, чтобы не было утечек памяти?
|
: Декабрь 09, 2023, 13:30
|
Разработчики Qt в своей архитектуре смешали вопрос иерархии экземпляров объектов и вопрос владения, заложив правило, что верхний в иерархии объект удаляет объекты ниже в иерархии. Это привело к тому, что в Qt традиционно используют сырые указатели.
Не вижу ничего плохого а этом правиле. Ну хорошо, а как же должна выглядеть связка парент-чайлд в свете новых достижений семантики? Парент владеет чайлдами? Да, стало быть все равно парент должен иметь контейнер чайлдов. Или (теперь уже) вумных указателей. Да, но "юники" копировать нельзя, а контейнер потребует. Слышал как-то это обходится "муванием". И как тогда удалять тот же виджет (чайлд)? Да уж наворотили в Qt всего . Ах как мы добродушны и снисходительны
|
|
|
8
|
Qt / 2D и 3D графика / Re: 3D график по точкам
|
: Ноябрь 01, 2023, 19:27
|
Необходимо виазулизировать траекторию. Покрутить мышкой в 3Д, приблизить, удалить, посмотреть сверху/снизу. Чем это можно сделать? OpenGL. Графики или нет - все равно это "3D сцена", со всеми вытекающими. Вьюер - довольно большая работа (впрочем зависит от добросовестности исполняющего)
|
|
|
9
|
Qt / OpenGL / Re: Получение локальных координат объекта
|
: Ноябрь 01, 2023, 19:22
|
QVector3D screenPos(p.x(),p.y(),1.0f); // p.x, p.y экранные координаты клика QVector3D vecUnproj = screenPos.unproject(m_view, m_projection,QRect(0,0, 640, 480));
Y перевернута (см описание unproject). Z = 1 соответствует задней стенке фрустума, Z = 0 передней. У Вас Z = 3, нормируйте на nearRes, farRes, они те самые что даете в метод perspective, пере-вычислять не нужно. В обоих случаях Вы получили верный луч/вектор, но у Вас перспективное изображение, т.е. чем дальше объект от камеры (чем больше Z) - тем он меньше и больше прижимается к центру экрана. Зачем Вам перспектива в 2D сцене - не знаю. Для расстояния 3 0.314589/x = -0.949228/-3, ну x и будет примерно 1 (я ненастоящий сварщик)
Так можно ж "просто пройти дальше по ссылке"
|
|
|
|
|