Тема: [dev] manual debug
Показать сообщение отдельно
Старый 07.09.2010, 15:06   #4
MaS0n
Модератор
 
Регистрация: 09.03.2010
Адрес: dev/null
Сообщений: 126
Сказал(а) спасибо: 44
Поблагодарили 111 раз(а) в 47 сообщениях
MaS0n Скоро придёт к известностиMaS0n Скоро придёт к известности
Отправить сообщение для MaS0n с помощью ICQ
По умолчанию

Ну, во-первых, надо собирать все проекты в debug mode(в том числе и СД2).
Вот вкратце :
1. Приаттачить студию для отладки можно к любому процессу, если открыт нужный проект, потому что отладка скриптов требует открытый СД2 проект например, а отладка авторизации на сервере потребует аттач к realmd.exe, а не к mangos.exe

Так же отладка одного потока останавливает все, т.е вы ткнули бряк на каст спелла - прок, и вы не сможете отследить какие-то другие приходящие клиентские ответы, время как бы "замораживается". См. ниже фильтр потоков

2. Breakpoints - просто ставится напротив нужной строчки по щелчку мыши
Настройки бряков :

Location - можно задать местоположение брекпойнта через имя файла и номер строки

Condition - выполнение брекпойнта не просто по активации, а можно задать какое-то условие, два свойства, логическое - и проверить на true(Is true) или например изменение значения переменной(Has changed)

Hit Count - количество "проков" брекпойнта(или прокать всегда(break always)), например вам нужно прокнуть его всего два раза, место такое, ну например мув пакет, что приходит при любом движении мыши, очень неудобно когда куча проков и не знаешь какой когда и где произошел, а с этой опцией все гуд. По умолчанию 0 - срабатывает бесконечное число раз.

Filter - фильтр процессов и потоков, например вам нужна активация от конкретного потока(их почти всегда несколько) или процесса, соотв. фильтр по имени или номеру

When Hit - когда бряк прокнулся, что-то сделать - например напечтать сообщение, исполнить макрос(подробнее ниже) или просто продолжить выполнение функции/процедуры/метода - как бы пропустив брекпойнт(не останавливая процесс/приложение)

http://habrahabr.ru/blogs/net/102178/ - еще более подробно)

3. Трассировка

Так всеми вами любимый F10 - Step Over(Шаг с обходом) - делает трассировку основного кода в стеке, проходя(пропуская) другие функции, используется когда нужно быстро пробежатся по коду, просмотреть пару переменных и получить конечный результат

Step Into(Шаг с заходом) - трассировка с заходом в каждую встреченную функцию и переход трассировки на код этой функции. Я почти всегда пользуюсь этим видом, а не "F10"

Step Out(Шаг с выходом) - банальный выход из функции, где прокнул бряк, естественно с нужным возвратом результатов выполнения и т.д

4. Окна

Autos - текущие состояния переменных(массивов, контейнеров и т.д) - в текущий момент(т.е грубо говоря, на желтой полоске)

Locals - локальные переменные внутри функции, где в данный момент происходит трассировка

Call Stack - стек вызовов, вся цепочка - приводящая к проку брекпойнта, обычно начинается от ворлдовского таймера(потока) и заканчивается нашей функцией, можно проследить вызовы, просто щелкая по нужным функциям

Breakpoints - окно брекпойнтов

Command Window - командная строка, здесь неактуально

Immediate Window - отладочное окно, можно высчитывать результат функций, которые возвращают какое-то значение, ну например CalculateDamage, записав
в таком виде
Код:
?CalculateDamage(параметры)
вы получите результат - весьма удобная вещь

Output - окно вывода, например информации о компиляции и т.д, думаю все понятно, можно перенаправлять на это окно выводы с функций, но здесб не буду рассказывать, это не столь необходимо, когда есть breakpoint hit и отладочное окно

Watch 1...4 - окно просмотра значений переменной/массива, правой кнопкой мыши на переменную/массив и Add Watch. Для чего надо - например вам нужно отследить изменение переменной/массива в процессе трассировки функции, добавляется ватч - и просто трассируете и смотрите в это окошко - не надо каждый раз искать в коде эту переменную/массив и наводить указатель мыши для получения значения, а так же можно прям в этом окошке редактировать значения.

Quick Watch - тут же показывает вам результат/значение мгновенно.

Threads, Processses, Modules :

Окно потоков(как я уже говорил, в момент прока бряка могут выполнятся еще потоки - например пришел от клиента пакет иди запрос к БД)

Окно загруженных библиотек(модулей) - (dll и информация о них, например адрес в памяти отлаживаемого процесса)(первый модуль - само приложение, адрес обычно стандартный для PE Windows - 0x00400000)

Окно отлаживаемых процесссов(да, их может быть несколько)

Memory 1...4 - снимок памяти данного участка в hex-виде, можно указать конкретный адрес

Disassembly - показывает все в ассемблерном коде

Ну вот и все, да, просмотреть вручную какие-то значения или данные можно, просто наведя мышку на нужный участок(переменная и т.д) при остановке и срабатывании бряка
Вот чем я обычно пользуюсь. Кому надо подробнее - гуглите)
MaS0n вне форума   Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
KiriX (07.09.2010), partizanes (07.09.2010), virusav (07.09.2010)