ДЧ
Дмитрий Черновол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, так что баги могут быть под различными ОС.

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

              Комментарии

              Только авторизованные пользователи могут публиковать комментарии.
              Пожалуйста, авторизуйтесь или зарегистрируйтесь
              AD

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

              • Результат:50баллов,
              • Очки рейтинга-4
              m
              • molni99
              • 26 октября 2024 г. 1:37

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

              • Результат:80баллов,
              • Очки рейтинга4
              m
              • molni99
              • 26 октября 2024 г. 1:29

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

              • Результат:20баллов,
              • Очки рейтинга-10
              Последние комментарии
              i
              innorwall11 ноября 2024 г. 22:12
              Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
              i
              innorwall11 ноября 2024 г. 18:23
              QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
              i
              innorwall11 ноября 2024 г. 15:50
              Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
              i
              innorwall11 ноября 2024 г. 14:19
              Алгоритм сортировки кучей The role of raloxifene in preventing breast cancer priligy precio
              i
              innorwall11 ноября 2024 г. 13:55
              PyQt5 - Урок 006. Работа с QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
              Сейчас обсуждают на форуме
              i
              innorwall11 ноября 2024 г. 20:56
              добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
              i
              innorwall11 ноября 2024 г. 10:55
              Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
              9
              9Anonim25 октября 2024 г. 9:10
              Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
              ИМ
              Игорь Максимов3 октября 2024 г. 4:05
              Реализация навигации по разделам Спасибо Евгений!

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