Удаленная отладка глюков (или "Лучше бы я Segmentation Fault словил"...)

Модератор: Модераторы разделов

xintrea
Сообщения: 27

Удаленная отладка глюков

Сообщение xintrea »

Здравствуйте дорогие линуксоиды.


А вот у меня есть такой вопрос.. Неделю уже бъюсь, не знаю
что делать.

Есть некая программа (язык C, использует SDL для графики и звука),
и она у меня работает нормально. А вот у другого человека,
который находится в другом городе, программа с завидной
постоянностью - где-то 1 запуск из 10 - глючит.

Глюк проявляется в том, что в какой-то момент исчезает звук.
В какой момент исчезнет звук - предсказать сложно.

Подробное логирование действий программы показывает, что
перестаёт вызываться call-back функция обслуживания звука в SDL.
При этом в error-консоли никаких ошибок не регистрируется.
И программа нормально продолжает работать без звука.
Звук в других приложениях есть и работает.

И вот вопрос - как понять, что же происходит? Логирование показывает
место ошибки (call-back функция перестаёт писать log-сообщения),
но не причину ошибки. Пользователь не настолько продвинут
чтобы запустить программу под gdb или valgrind, причем четко поймав
момент глюка. Да и даже еслиб я сел за его компьютер и имел весь
инструментарий, скорее, не смог бы этого сделать - по предыдущей причине
и по причине того, что например под valgrind дождаться глюка нереально
долго (тридиционное замедление выполнения в 25-50 раз).

Вот вопрос - как же поймать причину этого глюка? Причем сделать
это удаленно (у меня-то все работает). Пользователь умеет только
запускать программу.

Возможно, что-то портит память или какойто код неправильно работает
со стеком или еще чего... Как это узнать? Удаленно?
Спасибо сказали:
Andrew S
Сообщения: 225
Статус: экспериментатор
ОС: Conrad-Gentoo

Re: Удаленная отладка глюков

Сообщение Andrew S »

Копай в сторону gdb/gdbserver, он позволяет отлаживаться по TCP/IP
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Удаленная отладка глюков

Сообщение Zeus »

xintrea писал(а):
25.04.2006 01:19
перестаёт вызываться call-back функция обслуживания звука в SDL.
При этом в error-консоли никаких ошибок не регистрируется.
И программа нормально продолжает работать без звука.

Может банально pause где-то вызывается?

Andrew S писал(а):
25.04.2006 09:52
Копай в сторону gdb/gdbserver, он позволяет отлаживаться по TCP/IP

Дык если есть хорошее TCP/IP соединение, то можно банально ssh'ем зайти туда и отлаживаться :)
Спасибо сказали:
xintrea
Сообщения: 27

Re: Удаленная отладка глюков

Сообщение xintrea »

Zeus писал(а):
25.04.2006 13:24
Может банально pause где-то вызывается?


Можно подробнее, что вы имеете в виду под "pause"?

Zeus писал(а):
25.04.2006 13:24
Дык если есть хорошее TCP/IP соединение, то можно банально ssh'ем зайти туда и отлаживаться :)


Ну это далеко не банально. Это нереально. Пользователь умеет программы запускать
и мышой тыкать. Настроить отклик от win-модема, настроить соединение,
настроить iptables, установить gdb и gdbserver или открыть ssh - для
пользователя нереально. Да и связь оставляет желать лучшего.

Интересует программный метод или инструментарий, который позволит
получить лог/дамп, причем в нужный момент времени, когда произошел глюк,
в котором бы было видно, какая функция полезла не туда или кто обратился
к адресу где хранится вызываемый адрес callback SDL функции.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Удаленная отладка глюков

Сообщение Zeus »

xintrea писал(а):
25.04.2006 13:43
Zeus писал(а):
25.04.2006 13:24

Может банально pause где-то вызывается?

Можно подробнее, что вы имеете в виду под "pause"?

Ну функция SDL_PauseAudio.

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

Тут я пас - такими делами не занимался.
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: Удаленная отладка глюков

Сообщение Asgard »

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


хм, для этого обычно добавляют в программу набор контрольных точек, совершающих хоть ту же банальную запись в лог и компилирующихся только при явном указании debug режима.
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали: