ДЧ
Дмитрий Черновол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++ - Тест 004. Указатели, Массивы и Циклы

              • Результат:60баллов,
              • Очки рейтинга-1
              Дмитрий

              C++ - Тест 003. Условия и циклы

              • Результат:92баллов,
              • Очки рейтинга8
              d
              • dsfs
              • 26 апреля 2024 г. 1:56

              C++ - Тест 004. Указатели, Массивы и Циклы

              • Результат:80баллов,
              • Очки рейтинга4
              Последние комментарии
              k
              kmssr8 февраля 2024 г. 15:43
              Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
              АК
              Анатолий Кононенко4 февраля 2024 г. 22:50
              Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
              EVA
              EVA25 декабря 2023 г. 7:30
              Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
              J
              JonnyJo25 декабря 2023 г. 5:38
              Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
              G
              Gvozdik18 декабря 2023 г. 18:01
              Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
              Сейчас обсуждают на форуме
              G
              George136 мая 2024 г. 21:27
              добавить qlineseries в функции в функции: "GPlotter::addSeries(QString title, QVector &arr)" я вызываю метод setChart(...), я в конструктор передал адрес на QChartView элемент
              BlinCT
              BlinCT5 мая 2024 г. 2:46
              Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
              PS
              Peter Son3 мая 2024 г. 14:57
              Best Indian Food Restaurant In Cincinnati OH Ready to embark on a gastronomic journey like no other? Join us at App india restaurant and discover why we're renowned as the Best Indian Food Restaurant In Cincinnati OH . Whether y…
              Evgenii Legotckoi
              Evgenii Legotckoi2 мая 2024 г. 11:07
              Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.
              IscanderChe
              IscanderChe30 апреля 2024 г. 1:22
              Во Flask рендер шаблона не передаётся в браузер Доброе утро! Имеется вот такой шаблон: <!doctype html><html> <head> <title>{{ title }}</title> <link rel="stylesheet" href="{{ url_…

              Следите за нами в социальных сетях