LINUX.ORG.RU

Как отлаживать софт?

 ,


0

1

Нужно самому выявить причину бага с софте, так как на лоре мне никто так не ответил толком на различные вопросы. Предполагается что буду исследовать всевозможные стеки вызовов относительно визуальных маркеров (например, когда игра выводит в терминал информацию о ошибке, в этот момент я отлавливаю стек, где будут отображены все вызываемые функции и переданные им аргументы).

Как такое правильно делать и правильно я рассуждаю? Расскажите о опыте отладки и устранении выявленных багов. Приветствуется опыт отладки полузакрытого (debug-информация частично присутствует в бинарниках) и полностью закрытого софта.

★★★★★

Ты читал руководство по отлаживанию в вайне? Там довольно нормально расписано. Надо начинать с печати трейсов. Выводит информацию о том, какие функциии winapi с какими параметрами вызваны. Потом по этому выводу ищешь функцию, после которой все накрылось, запускаешь на отладчике, поставив брейк на эту проблемную функцию вайна и смотришь что там внутри.

Это если очень повезет и проблема возникает внутри вайна и проявляется сразу. А если вайн вовзращает некорректное значение в приложение, и потом оно через 5 минут к нему обращается и крашится, то удачи ковырять закрытый бинарник.

Теперь об опыте.

Я заводил NHL 09 так. Вылетало сразу после одного из вызовов WinAPI, я его просто отключил, закомментировав всю функцию. Оказалось что она не больно то и нужна )) После этого вылетало при событии «ресайз окна». Ну отключил вызов этого коллбака. И игра пошла без каких-либо проблем.

curufinwe ★★★★★ ()

Третье возможно directdraw или как там его, стим его для антиалиасинга шрифтов использует и можно отключить если шрифты без сглаживания тебе ок. Очень зависит от версии вайна. Ещё бывает дело в системном fontconfig. Второе покопай в стороны пульсы и dsound.dll, ну а первое твои половые проблемы.

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

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

Скорее всего, это deadlock между потоками. Два потока ждут друг друга. Много на каких приложениях бывает, хз как фиксить.

Попробуй хотя бы wine вот с этими опциями запустить, https://wiki.winehq.org/Debug_Channels может что прояснится.

WINEDEBUG=+relay wine ...

curufinwe ★★★★★ ()
Последнее исправление: curufinwe (всего исправлений: 1)
Ответ на: комментарий от curufinwe

А не, разобрался. Было сказано нажать Ctrl+C на проблемном месте.

[xdshot@lenovo-pc win64]$ winedbg dmxconvert.exe 
WineDbg starting on pid 003f
^CCtrl-C: stopping debuggee
Ctrl-C: stopping debuggee
0x00007f2e254684d6 pthread_sigmask+0x46 in libpthread.so.0: movl	%eax,%edx
Wine-dbg>bt
Backtrace:
=>0 0x00007f2e254684d6 pthread_sigmask+0x46() in libpthread.so.0 (0x000000000023e5a0)
  1 0x000000007bce2da9 NtAllocateVirtualMemory+0x658() in ntdll (0x000000000023e5a0)
  2 0x00000001800365cc in tier0 (+0x365cb) (0x0000000000002000)
  3 0x0000000180026451 in tier0 (+0x26450) (0x0000000000000000)
  4 0x000000018002735d in tier0 (+0x2735c) (0x0000000000000002)
  5 0x0000000180027df8 in tier0 (+0x27df7) (0x0000000000000002)
  6 0x000000018001d92e in tier0 (+0x1d92d) (0x0000000000000002)
  7 0x000000018001d268 in tier0 (+0x1d267) (0x0000000000000002)
  8 0x000000018001dcee in tier0 (+0x1dced) (0x0000000000000002)
  9 0x0000000180001107 in tier0 (+0x1106) (0x0000000000000002)
  10 0x000000018006efcf in tier0 (+0x6efce) (0x0000000000000002)
  11 0x00000001800505d3 in tier0 (+0x505d2) (0x000000000023e8e0)
  12 0x0000000180050725 in tier0 (+0x50724) (0x000000000023e8e0)
  13 0x000000007bc81122 in ntdll (+0x41121) (0x000000000023e8e0)
  14 0x000000007bc81533 in ntdll (+0x41532) (0x0000000000000000)
  15 0x000000007bc81408 in ntdll (+0x41407) (0x0000000000000000)
  16 0x000000007bc84cdf in ntdll (+0x44cde) (0x000000000023fb00)
  17 0x000000007bcbf4ee in ntdll (+0x7f4ed) (0x000000007b4816d0)
  18 0x000000007bcb7142 start_thread+0x41() in ntdll (0x000000007ffdf000)
Wine-dbg>
xDShot ★★★★★ ()
Ответ на: комментарий от xDShot

Краны очень любят все сырые поделки гугла пихать в код, сами или им помогают кадры с аутсорса не знаю, но были проблемы с той либой которая исключения ловит и совершенно диким забагованным malloc (кажется из perftools). А уж приключения мультипоточных приложений это совершенно отдельная область их пробем.

anonymous ()

Если вы далеки от отладки, то может проще использовать GUI к gdb, а не с консолькой пердолится?

Открываем сорцы wine в Qt Creator (если у них там cmake). Собираем. Запускаем через отладчик и бегаем по коду без извращений.

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

Решение проблемы добавлением других перевешиваемых существенных проблем (таких как ухудшение производительности и объективно худшие драйверы) не является решением.

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

А, то есть, ковыряние при помощи gdb в проприетари с попытками патчить wine — это решение ваших проблем. Ну, удачи, завидую белой завистью объёмам вашего свободного времени.

Deleted ()