Helpers - компьютеры, интернет, программирование

Поведение планирования потоков в Linux между шагами с GDB по сравнению с нешаговым выполнением с GDB

В руководстве GDB указано, что при использовании режима all-stop для отладки многопоточного приложения невозможно продвигать каждый поток в режиме блокировки ровно на одну инструкцию. Это имеет смысл, поскольку шаг в GDB по существу позволяет ОС планировать все потоки (однако ОС решает это сделать) до тех пор, пока следующий оператор не будет достигнут потоком, для которого был вызван шаг.

Мой вопрос заключается в следующем: разумно ли предположить, что среднее поведение планирования ОС между шагами GDB сравнимо со средним поведением планирования ОС, когда оно не выполняется (при этом все еще используя GDB, чтобы сохранить как можно больше переменных постоянными), насколько это возможно), или достаточно ли степпинга мешает планированию, чтобы продвижение потоков не было (в среднем) таким же, как без степпинга?

Если степпинг влияет на поведение, как я могу получить точное представление о потоке многопоточной программы и состоянии программы в дискретных точках моей программы? Будет ли возможна запись и воспроизведение?


  • Что вы отлаживаете - проблемы с синхронизацией/потоками или правильность данных? 29.11.2018
  • Это касается вопросов синхронизации/потоков. У меня есть поток (внутри проприетарной библиотеки), который остается живым даже после того, как должен был умереть. Я хочу знать, является ли это нормальным поведением или мой степпинг GDB каким-то образом не позволяет этому потоку получить процессорное время, необходимое для его уничтожения. 29.11.2018

Ответы:


1

Разумно ли предположить, что среднее поведение планирования ОС между шагами GDB сравнимо со средним поведением планирования ОС, когда не выполняется пошаговое выполнение?

Не совсем. Среднее поведение «без шага» будет иметь потоки, либо исчерпавшие свои кванты времени, либо блокирующие системные вызовы. В «пошаговом» случае потоки вряд ли исчерпают свои кванты времени (поскольку временной интервал между шагами, вероятно, будет очень коротким). Таким образом, среднее поведение, скорее всего, будет сильно отличаться.

как я могу получить точное представление о потоке многопоточной программы и состоянии программы в дискретных точках моей программы?

В общем, вас не должна заботить многопоточная программа flow. Таким образом невозможно отлаживать многопоточные программы.

При многопоточном программировании вы должны заботиться о сохранении инвариантов (каждый ресурс, к которому могут обращаться несколько потоков, защищен от гонок данных и т. д.). Если вы это сделаете, ваша программа просто будет работать (ТМ). Если вы этого не сделаете, вы вряд ли найдете все способы неправильного поведения программы.

30.11.2018
  • Не могли бы вы все-таки ответить на вопрос? Есть способ или нет? 30.11.2018
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..