LINUX.ORG.RU

Посоветуйте дебаггер для особо запущенных многопоточных косяков?


0

1

В работе учавствуют фактически 3 потока - цикл событий Qt, новый поток и ядро. Ядро вносит вклад сигналами, если я верно понимаю, что коллбеки ALSA активирует по сигналам.

30 раз в секунду срабатывает QTimer (анимация интерфейса), раз 50 в секунду фигачит ALSA-коллбек (за новыми пакетами звука приходит, а они мелкие) иногда оба этих потока (QTimer, ALSA) запрашивают у третьего данные из файла (WAV). Это механизм примитивен, на первый взгляд отлажен и т.п.

Короче, всё это дело работает какое-то время, потом то через минуту, то через 20 минут вешается. Перестают приходить ALSA-коллбеки (что странно, если учесть, что сигналы могут приходить, пока предыдущий обработчик сигнала не завершился), перестаёт фигачить QTimer (его обработчик наверное запинается об какой-то мьютекс), естественно интерфейс тоже вешается, т.к. он живёт через тот же цикл обработки событий Qt, откуда растут ноги у сигналов от QTimer.

Короче я не могу запостить код - никто не будет смотреть кучу исходников, никому это не нужно. gdb не факт, что хорошо всё покажет.

Под windows есть intel vtune amplifier XE 2011, который графически рисует поведение всех потоков со всеми мьютексами, легко видишь кто кого повесил.

Под linux-то как жить?

Под linux-то как жить?

Вот если бы ты качала софт с сайта производителя, а не помоек всяких, то знал бы, что intel vtune amplifier есть и под линух!

А еще есть helgrind.

И самый главный инструмент - это /dev/brain

Без него все вышесказанное неработоспособно.

AF ★★★
()
Ответ на: комментарий от AF

printf, log файлы. Дебагер при многосеточных и асинхронных программах крайне не эффективная вещь.

sn1ln
()
Ответ на: комментарий от AF

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

nanoolinux ★★★★
()

Когда я отлаживал многопоточный отвратительный говнокод, обошелся логами, просто ткнув запись в лог во все спорные точки. Если события происходят по 50 раз в секунду, можно не заморачиваться с буферизацией и просто кидать всю нужную отладочную информацию в файл.

amomymous ★★★
()

Нормальное качественное логирование.
Дебагер нужен только тогда, когда есть подозрение на баг в каких-то системных вызовах и т.п. В 90% случаев применение дебагера это синоним «я не понимаю, как работает программа, и понимать не хочу и хочу побыстрому тут костыль нафигачить».

vtVitus ★★★★★
()

Для linux эта тулза тоже есть :)

westtrd
()
Ответ на: комментарий от vtVitus

Обычно обхожусь логами. Сейчас уже не знаю, куда бы ещё воткнуть лог, всё ими истыкано, ситуация странная. Просто ситуация непривычная - множественный заход в обработчик сигнала, похоже блокировка на мьютексе внутри alsalib (повторный заход из нового обработчика, пока оттуда не вышел старый, а старый никогда не выйдет, т.к. переключения «потоков» нет - новый обработчик никогда не отдаст управление старому, пока не довыполняется). Это пока единственное, что показывают логи. Просто немного дико это осознавать - как такое допустимо в принципе в ALSA...

kiverattes ★☆
() автор топика
Ответ на: комментарий от vtVitus

Нормальное качественное логирование.

Это как, когда кода логов в два раза больше остального? Есть у меня такой коллега, очень хочется его прибить.

Некоторые хронически путают логи с трейсом. Чтобы сделать трейс, следует использовать специальный софт.

JackyTreehorn
()
Ответ на: комментарий от vtVitus

«я не понимаю, как работает программа, и понимать не хочу и хочу побыстрому тут костыль нафигачить».

Чушь.

Дебагер нужен тогда, когда «я не понимаю почему программа делает не то, что я хочу, когда вроде бы и деваться некуда».

Это только в хэлоуворлдах всё сразу видно и ясно.

трейс (подробное логирование каждого чиха) и дебаггер - взаомидополняющие вещи.

invy ★★★★★
()
Ответ на: комментарий от invy

Какой бойкий у нас тут. А теперь, будь любезен, перечитай оба высказывания.

Смысл «как работает» - довольно широк, «делает не то» - не настолько сильное уточнение, чтобы так самоуверенно вбрасывать.

anonymous
()
Ответ на: комментарий от JackyTreehorn

Это как, когда кода логов в два раза больше остального? Есть у меня такой коллега, очень хочется его прибить.

Это не качественное логирование. Код логов не должен быть большим и при помощь макросов и т.п. средств легко сделать.


Некоторые хронически путают логи с трейсом. Чтобы сделать трейс, следует использовать специальный софт.

Некоторые теоретики никогда не запускали софт в продакшен и не знают, какие проблемы возникают при нагрузках, большом кол-ве соединений, атаках и т.п. И каким макаром эти проблемы детектируются и исправляются.

vtVitus ★★★★★
()
Ответ на: комментарий от invy

Это только в хэлоуворлдах всё сразу видно и ясно.

В школу.
В нормально написанной программе должно быть все достаточно прозрачно и никаких темных мест быть не должно.
Самый главный критерий качества кода - понятность для других программистов. Без этого хоть засидись в дебагере, будет глючить и бажить.
Логирование оно для понимания работы системы в продакшене, когда приходит заказчик и говорит «у нас не работает». Это приходит с опытом, так что у тебя все впереди.

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

В школу.
В нормально написанной программе должно быть все достаточно прозрачно и никаких темных мест быть не должно.
Самый главный критерий качества кода - понятность для других программистов. Без этого хоть засидись в дебагере, будет глючить и бажить.
Логирование оно для понимания работы системы в продакшене, когда приходит заказчик и говорит «у нас не работает». Это приходит с опытом, так что у тебя все впереди.

«продакшн», «заказчик»... «серьёзного бизнеса» не хватает и в придачу наглость и самоуверенность. Знакомые симптомы - встречали таких пациентов.
А твоё знание о способах применения отладчика как раз отлично вписывается - по коллегам судишь или по себе?
А главное совершенно не в тему - где имение, где наводнение.
Если у тебя только-что написаный велосипед, который вдруг падает в каком-то месте. При чём тут заказчики, другие программисты и критерии качества? Как оно между собой коррелирует, если у тебя в твоём велосипеде по элементарной невнимательности пропущен какой-нибйдь mutex.lock()?

invy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.