Доброго времени суток! Дебагингом занимаюсь совсем недавно. Первый опыт оказался более чем успешным, и сама отладка проблем не вызывает. К сожалению, столкнулся с неприятной проблемой - приложение (игруха) использует DirectDraw, разрешение 640х480 и 8-бит цвета. Убрал флажок TOP_MOST и она начала сворачиваться по Win+D (и только по нему) при достижении бряков. Это одноразовая операция, развернуть ее после уже не получается. Любое перемещение окна (в том числе в момент создания) или его размеров приводит к черному экрану (но игуха работает). В довершении всего, брякнуть дебагер нужно вручную в определенный момент. Бряки на вызов функций, память и ручная отладка не помогут. Это что касается грустного. Теперь совсем грустное: Решил приконектиться удаленным отладчиком. Кандидата была два - IDA и WinDbg. Первая приконектилась, но нарисовала аж пять каких-то нитей. Одна всегда висит в районе чего-то монстроузного: Код (Text): ntdll.dll:7C95211C ntdll_DbgUiRemoteBreakin: ntdll.dll:7C95211C push 8 ntdll.dll:7C95211E push offset unk_7C952168 ntdll.dll:7C952123 call near ptr unk_7C90E8CB ntdll.dll:7C952128 mov eax, large fs:18h ntdll.dll:7C95212E mov eax, [eax+30h] ntdll.dll:7C952131 cmp byte ptr [eax+2], 0 ntdll.dll:7C952135 jnz short loc_7C952140 ntdll.dll:7C952137 test byte_7FFE02D4, 2 ntdll.dll:7C95213E jz short loc_7C952160 ntdll.dll:7C952140 ntdll.dll:7C952140 loc_7C952140: ; CODE XREF: ntdll.dll:ntdll_DbgUiRemoteBreakin+19j Оставшиеся: Код (Text): ntdll.dll:7C90E514 ntdll_KiFastSystemCallRet: ntdll.dll:7C90E514 retn В стеках: Код (Text): Первая нить: 0012FD9C 77F30E29 gdi32.dll:gdi32_DdEntry26+C 0012FDA0 77F30E12 gdi32.dll:gdi32_DdEntry31+40 0012FDA4 56400002 0012FDA8 56400004 0012FDAC 00000000 0012FDB0 00000000 0012FDB4 0012FE64 Stack[00000560]:0012FE64 0012FDB8 0014AEA8 debug007:0014AEA8 0012FDBC 00000000 Вторая нить: 00E4FED0 7C90DF4A ntdll.dll:ntdll_ZwWaitForMultipleObjects+C 00E4FED4 7C809590 kernel32.dll:kernel32_CreateFileMappingA+86 00E4FED8 00000002 00E4FEDC 00E4FEF8 debug041:00E4FEF8 00E4FEE0 00000001 00E4FEE4 00000000 00E4FEE8 00000000 00E4FEEC 0014F000 debug025:0014F000 Третья нить: 0104FD88 7C90DF4A ntdll.dll:ntdll_ZwWaitForMultipleObjects+C 0104FD8C 7C809590 kernel32.dll:kernel32_CreateFileMappingA+86 0104FD90 00000040 0104FD94 001579A0 debug026:001579A0 0104FD98 00000001 0104FD9C 00000000 0104FDA0 00000000 0104FDA4 00000000 0104FDA8 00000040 Четвертая нить: 0114FD90 7C90DF4A ntdll.dll:ntdll_ZwWaitForMultipleObjects+C 0114FD94 7C809590 kernel32.dll:kernel32_CreateFileMappingA+86 0114FD98 00000001 0114FD9C 0114FDB8 debug046:0114FDB8 0114FDA0 00000001 0114FDA4 00000000 0114FDA8 0114FDEC debug046:0114FDEC 0114FDAC 00000000 Пятая нить: 00AFFFF8 00000000 00AFFFFC 00000000 00B00000 BA468C55 00B00004 4FB19956 00B00008 A7529DA5 00B0000C AAC67CDD 00B00010 0DABC3D1 00B00014 00000000 Я новичок и мне это совершенно ничего не говорит. (Но данные отображаются верно, регистры тоже, пуск\пауза\стоп работают) Далее попытался подключиться WinDbg'ером. Тут все еще хуже. Lan меня послал, сказав, что сие возможно только для x86-систем (а у меня основная х64). По com как подключиться - не ясно. Наткнулся на эту вот тему: http://www.wasm.ru/forum/viewtopic.php?id=30350 (а заодно и на этот форум) перепробовал всё. Увы - тишина покой. kdsrv.exe на виртуалке запускал. Из-под батника он в процеесах даже не появляется. Из консоли - запускается молча, молча висит. Далее, windbg'ром пытаюсь коннктиться. Всегда пишет одно и тоже: Люди добрые-знающие, помогите кто чем может! На данный момент мой идеал OlyDbg. Если можно натравить его на сеть - было бы здорово! Нельзя - подойдет любой другой дебаггер хотя бы отдаленно его напоминающий. Та же IDA, то же WinDbg. В распоряжении имею комп с ОС Windows 7 x64. COM-портов естественно нет. VMWare Workstation 8. На ней - Windows XP х86 и отлаживаемая программа. В настройках виртуалки: Serial Port - Use named pipe "\\.\pipe\com_1" - The end is the server - The other end is an application Буду благодарен за любую помощь! Спасибо!
syser попробуй. он правда ремот не держит, но на варе по хоткеям брякнет систему. для виндбг делаем ярлык C:\WinDDK\7600.16385.1\Debuggers\windbg.exe -k com:pipe,port=\\.\pipe\com_1 а еще для ремоута нужно сами винь отконфигурить, т.е. в c:\\boot.ini т.е. копипастим оригинальную запись и добавляем /DEBUG /DEBUGPORT=COM2 /BAUDRATE=115200 потом во время загрузки будет предоставлен выбор...
Большое спасибо! Попробую! Пока мучался, обнаружил, что и Oly хоткеями брякает. К сожалению не помогло. Отладка упирается в странную функцию, которая пропускает нулевые символы, а ненулевые пишет в область памяти, находящуюся за границами секций. При обычном выполнении это игнорируется, но стоит остановить отладку, а затем запустить - падает с AccessViolation и Shift+Click не помогает (или помогает, но там в любом случае несколько тысяч итераций).
Увы. Не помогло. Тоже самое: kdsrv.exe на виртуалке запускать не нужно? На всякий случай, попробовал запустить: kdsrv.exe -t npipe:pipe=\\.\pipe\com_1 Тоже самое.
на виртуалке ничего не нужно делать помимо как настроить загрузчику под дебаг. В самой варе нужно создать порт ну и указать что юзаем неймед пайп (\\.\pipe\com_1) У себя на машине поставить виндбг и запустить его с параметрами (указал в пред посте). Запускаем варю, там выбираем вариант загрузки виндоса - "под отладкой", рас,два - двойной клик по иконке с аргументами для виндбг. = все, мы поехали (должны по крайней мере) *мож сюсером попробуете, он не такой набаганый как виндбг)
Порт создан. Виндбг поставлен. Варю запустил. В отладочном режиме систему запустил. Виндбг с параметрами запустил. = =\\\ Сайсером попробую.
Буквально на днях настраивал по этому мануалу и все работало http://silverstr.ufies.org/lotr0/windbg-vmware.html
О! Еще один мануал! И снова что-то новенькое. Вот про это в прежнеих ни слова не было сказано. Спасибо! Попробую. Правда, опять же там VMWare какая-то старенькая. У меня - 8ка. Может, она глючит. Но в любом случае - попытаюсь.
А ты чего ожидал. Сейчас все игры многопоточные и никуда ты от этого не уйдешь. По поводу удаленной отладки: ты похоже плохо понимаешь механизм ее работы. И неправильно настраиваешь из-за этого. В инструкции с ufiles.org упущен важный момент: не зря там про F8 сказано - нужно грузить систему с включенным режимом отладки и первый бряк будет еще далеко до входа в систему(по-моему режим просто включается ключом /debug). Ну и ASMatic почему-то в своемпосте написал com2, хотя у тебя везде com1 И ты напрасно роешь в сторону kd - это kernel debug, отладка ядра Винды. До приложений ты оттуда по-моему не доберешься. Для отладки приложений не надо морочится с com-портами, уже давно реализован интерфейс взаимодействия по сети. Ищи по слову TCP и будет тебе счастье. Ну еще помучишься слегка с настройкой сети в VmWare, но по-моему давно уже есть нормальные мануалы .
valterg Увы, нормальных мануалов не обнаружил. TCP на выходных погуглю. Сейчас - да. Но эта старая (2000г) вполне себе однопоточная игра. Спасибо за разъяснение насчет kd!