ДЧ
Дмитрий ЧерноволАқп. 16, 2017, 1:32 Т.Ж.

Почему один и тот же код работает по разному на Windows и Linux?

Я ниже по постам задавал вопрос, о том что программа вылетает и бла-бла-бла. Так вот. Скомпилировал я значит эту программу под линуксом, подключаю устройство (модуль Modbus Slave). Захожу в графики, и начинаю с ними играть. И вот уже 45 000 пакетов и программа не вылетает. Никаких помех, код работает как часы. А под виндой, если двигать графики, сразу "Прекращена работы программы "бла бла бла"" Вот почему так? Под линуксом хорошо, а под виндой такие дела?

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

6
ДЧ
  • Ақп. 16, 2017, 1:36 Т.Ж.

Вот

    Evgenii Legotckoi
    • Ақп. 16, 2017, 2:10 Т.Ж.

    Потому, что любая кроссплатформенная библиотека подразумевает несколько бэкендов, которые выбираются настройками проекта при компилировании программы (так называемый Pimpl, использование Private API). Степень качества работы конкретного бэкенда будет естественно зависеть от профессиональных навыков разработчика, который занимается развитием данного бэкенда. Также на качество работы влияет API самой операционной системы.

    Скриншот, который Вы привели, абсолютно ничего не говорит о специфике проблемы, кроме того, что проблема имеется.

    Разработка бэкендов для кросплатформенной библиотеки естественно зачастую ведётся несколькими разработчиками, у каждого из которых свой собственный профиль: WinAPI, X11, MAC OS API, что характерно для крупных проектов, поскольку трудно быть Гуру во всех трёх направлениях одновременно, тем не менее уровень навыков специалистов будет различен по отношению к целевым API. То есть над WinAPI может работать специалист уровня Team Lead, а над X11 специалист уровня Middle.

    Также проблемы могут создавать сами API Операционной Системы. Например, написать Key Logger для Windows на мой взгляд проще, чем для Linux, просто потому, что под Windows есть заточенное под это API, так называемые Хуки, а под Linux такого нет, хотя имеется возможность захвата событий клавиатуры, но их потом ещё нужно правильно вернуть обратно в систему, что требует несколько больших навыков и знаний, чем при работе с WinAPI.

    А ещё проблемы может создавать компилятор )))) Было одно обсуждение, в котором обсуждалась утечка памяти при работе с WinAPI ICMP Ping, как выяснилось через пару недель, проблему создавал компилятор. Тот же самый код при сборке другим компилятором работал без утечек памяти при выполнении функций из WinAPI.

    Вывод: Причин такого поведения может быть множество.

    Решение: Использовать другие библиотеки, пробовать другие средства сборки, искать обходные пути (то есть костылировать проблему).

      ДЧ
      • Ақп. 16, 2017, 2:14 Т.Ж.

      Та как же её костылировать? Я бы рад...

        Evgenii Legotckoi
        • Ақп. 16, 2017, 2:22 Т.Ж.

        Понятия не имею ...

        Кроме одного скриншота и небольшого описания проблемы, Вы ничего не показывали, ни логов вывода, ни попыток дебагинга, где ложится программа. Ни программного кода, где происходит падение программы. Ничего, что могло бы натолкнуть на мысли о каком-нибудь совете, который помог бы Вам решить проблему.

        Запустите проект в режиме отладки и посмотрите в каком месте программы, в каком методе, происходит падение программы. Что вызывает проблему и т.д. и т.п.

          ДЧ
          • Ақп. 16, 2017, 2:47 Т.Ж.

          Приложение остановлено, так как оно получило сигнал от операционной системы. Сигнал: SIGSEGV Назначение: Segmentation fault И это только тогда когда начинаю двигать полотно графика. Как будто идёт какая-то помеха, которая мешает протоколу общаться с устройством. Как показано на скриншоте, то там ошибка в библиотеке qmodbusrtuserialmaster. Я на это не грешу. Мне кажется что проблема в моём коде. А иногда ошибка вываливается в ассемблерском файле. Я пытался отловить qDebug()-ом. Но и там такая ересь бывает просто. Было бы замечательно, если бы Вы выделили 10 минут на меня. И Вы бы по Team Viewer увидели проблему. Есть такие проблемы, что сложно отловить отладчиком.

            Evgenii Legotckoi
            • Ақп. 16, 2017, 9:02 Т.Ж.

            Сейчас у меня катастрофически не хватает времени на всё, так что насчёт Team Viewer не знаю. Тем более, что 10-ю минутами здесь не обойтись явно ...

            Если учесть Segmentation Fault, то видимо у Вас там обращение идёт к какому-то объекту раньше, чем он был инициализован. Вполне возможно, что как раз объект у qmodbusrtuserialmaster был недоинициализован. Впрочем, qmodbusrtuserialmaster - это довольно новый класс, его ввели только в Qt 5.6, так что баги могут быть под различными ОС.

            Поставьте точку останова в начале обработки сдвига на графике и проследите работу кода до момента падения программы. В том числе с просмотром содержимого переменных, по которым будет проходить алгоритм программы.

              Пікірлер

              Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
              Кіріңіз немесе Тіркеліңіз
              Г

              C++ - Тест 001. Первая программа и типы данных

              • Нәтиже:66ұпай,
              • Бағалау ұпайлары-1
              t

              C++ - Тест 001. Первая программа и типы данных

              • Нәтиже:33ұпай,
              • Бағалау ұпайлары-10
              t

              Qt - Тест 001. Сигналы и слоты

              • Нәтиже:52ұпай,
              • Бағалау ұпайлары-4
              Соңғы пікірлер
              G
              GoattRockҚыр. 3, 2024, 11:50 Т.Қ.
              Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
              d
              dblas5Шілде 5, 2024, 9:02 Т.Қ.
              QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
              k
              kmssrАқп. 9, 2024, 5:43 Т.Ж.
              Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
              АК
              Анатолий КононенкоАқп. 5, 2024, 12:50 Т.Қ.
              Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
              Енді форумда талқылаңыз
              Evgenii Legotckoi
              Evgenii LegotckoiМаусым 25, 2024, 1:11 Т.Ж.
              добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
              F
              FynjyШілде 22, 2024, 2:15 Т.Қ.
              при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
              BlinCT
              BlinCTМаусым 25, 2024, 11 Т.Ж.
              Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
              BlinCT
              BlinCTМамыр 5, 2024, 3:46 Т.Қ.
              Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
              Evgenii Legotckoi
              Evgenii LegotckoiМамыр 3, 2024, 12:07 Т.Ж.
              Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

              Бізді әлеуметтік желілерде бақылаңыз