Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Прочая документация

Важная информация

Прочая документация Помощь, книги, инструкции, описания

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.09.2010, 00:17   #1
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
Сообщение [dev] manual debug

Попробую сам описать по порядку все свои действия

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

Итак, Открываем проект с помощью visual studio (разбор идет на примере Visual studio 2010)

1) Выставляем режим Debug
(кажется этого хватает? )

2) Для того что бы запускать сервер прямо из студии(при условии отладки именно mangosd.exe )
устанавливаем проект по умолчанию mangosd


Примечание: Возможно можно еще и так -


3)Также по информации вроде как нужны sumbol библиотеки

DEBUG- Options and Sеttings
скачиваются прямо из этого же меню,устанавливаются сами


4)Устанавливаем рабочую папку (Working directory) [Для того что бы подхватывал *.conf файл ]


5)После Собираем Весь проект с помощью кнопки F7

6)Не Забываем положить в папку bin\Win32_Debug\

Примечание:
KiriX: Достаточно положить один конфиг, рилмд рапускать из рабочей папки сервера, а путь до ДБЦ и карт прописать в конфиге

a) файлы конфигурации mangosd.conf realmd.conf и по надобности scriptdev2.conf
(я думаю возможность отладки sd2 будет разобран чуть позже отдельно)

б)папки с dbc maps

в)Настроить конфигурационные файлы под себя (естественно тут уже как кому надо ,я допустим выставляю уровень вывода в консоль 3 и уровень записи в файл тоже 3
Код:
LogSQL = 3
PidFile = ""
LogLevel = 3
Остальные настройки тоже нужны выставлять для каждого определенного случая по разному ,что скрыть ,что то нет.


7)После проверяем запуская сервер из папки если прогрузка проходит удачно ,закрываем и запускаем из vs с помощью F5

Итак Когда все запустилось переходим к самому процессу отладки (всем огромное спасибо кто отписался в теме теперь вроде бы я понял как и что ,может быть не все ,но суть ясна)

Примечание: нас сейчас на данный момент интересует именно описанные в теме breakpointы, так вот их нужно расставлять в коде ,как будет разобрано чуть ниже.
Перекомпилировать не НУЖНО ,во время запущеного с vs сервера можно ставить и удалять брикпоинты . РАБОТАТЬ БУДЕТ

Разбирать будем по нескольким примерам:

Пример №1 (самый простой )

Находим в окошке проекта (Solution Explorer )

game - world/hadlers -battleground.cpp

открываем - ищем функцию (CTRL +F)
Код:
void BattleGround::SetBgRaid( uint32 TeamID, Group *bg_raid )
чуть ниже
Код:
old_raid = bg_raid;
Справа ставим брикпоинт с помощью левой кнопки мышки (вы сразу поймете если поставите ,большая красная точка)

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

В самом низу есть вкладка BreakPoints ,она вам тоже понадобиться


Примечание :так как при запуске главным проектом является mangosd ,то естественно realmd (логин сервер не запускается) ,поэтому запускаем его вручную из папки .
Возможно можно еще и так -


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

После всех этих действий должен сработать breakpoint ,вас или автоматически свернет на vs ,если этого не произошло свернитесь сами

Примечание:Как только срабатывает breakpoint весь мир замораживается ,и никакие действия происходить не будут!!! Для того что бы продолжить выполнение действий нужно в vs нажать F5 (Continue) (не спешите этого делать!)

После того как мы свернулись в vs -смотрим

Теперь при наведении на переменную видим значения этих переменных
Также обратите внимание как выглядит теперь красная точка.
Примечание:если вы обратили внимание то большинство значений 0 ,видимо по той простой причине что заход на бг,был произведен в дебаг режиме ,поэтому большинство значений просто не были нужны
После того как бы налюбовались и проверили значения ,убедились что в мире ничего не происходит .можно нажать кнопку F5 -и выполнение процесса продолжиться .

Пример №2






Всем спасибо за ответы.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.JPG
Просмотров: 1782
Размер:	4.5 Кб
ID:	633   Нажмите на изображение для увеличения
Название: 2.JPG
Просмотров: 1765
Размер:	33.1 Кб
ID:	634   Нажмите на изображение для увеличения
Название: 3.JPG
Просмотров: 1747
Размер:	41.3 Кб
ID:	635   Нажмите на изображение для увеличения
Название: sumbols.JPG
Просмотров: 1770
Размер:	49.0 Кб
ID:	636   Нажмите на изображение для увеличения
Название: 4.JPG
Просмотров: 1762
Размер:	71.4 Кб
ID:	638  

__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 08.09.2010 в 12:00.
partizanes вне форума   Ответить с цитированием
6 пользователя(ей) сказали cпасибо:
alien (09.09.2010), Feel the Power (07.09.2010), KiriX (07.09.2010), Konctantin (26.10.2014), Mayss (30.12.2010), srv38 (08.09.2010)
Старый 07.09.2010, 08:55   #2
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Я делал таким образом (в Release-режиме):
1. Компилю ядро, запускаю.
2. В студии выбираю Debug -> Attach to process -> mangosd.exe (в названиях мог ошибиться, т.к. студии под рукой нет).
3. Потом в нужных местах расставляю точки остановки и нажимаю F10 для дальнейшего перехода по строкам.

Данный способ посоветовала Laise, за что ей большое спасибо, т.к. сам не знал.

Правда, с СД2 такой номер не прокатывает, отладку так и не получилось запустить.
virusav вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
KiriX (07.09.2010), partizanes (07.09.2010)
Старый 07.09.2010, 09:21   #3
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

если в опция линкера не стоит "Generate debug info", то ничего дебажится не будет

проверьте в СД2 в свойствах проекта Configuration properties - Linker - Debugging - Generate debug info

если стоит No, то отладка при помощи VS будет невозможна

Последний раз редактировалось Йоха; 07.09.2010 в 09:25.
Йоха вне форума   Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
KiriX (07.09.2010), partizanes (07.09.2010), virusav (07.09.2010)
Старый 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)
Старый 07.09.2010, 15:25   #5
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Почему надо собирать ядро именно в debug-режиме, ведь отладка также работает и в release?
virusav вне форума   Ответить с цитированием
Старый 07.09.2010, 15:51   #6
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Почему надо собирать ядро именно в debug-режиме, ведь отладка также работает и в release?
конечно, можно выставить дебаг опции в релизе и спокойно дебажить
Йоха вне форума   Ответить с цитированием
Старый 07.09.2010, 15:55   #7
MaS0n
Модератор
 
Регистрация: 09.03.2010
Адрес: dev/null
Сообщений: 126
Сказал(а) спасибо: 44
Поблагодарили 111 раз(а) в 47 сообщениях
MaS0n Скоро придёт к известностиMaS0n Скоро придёт к известности
Отправить сообщение для MaS0n с помощью ICQ
По умолчанию

И трассировка работает, и все вышеперечисленные свойства? Насколько я знаю, сборка дебаг содержит отладочную информацию, которая как раз и позволяет вычислять заничения переменных, отслеживать вызовы функций и т.д. Да и в IDA код проще смотрится) Если б близы собирали в дебаге....))
MaS0n вне форума   Ответить с цитированием
Старый 07.09.2010, 16:40   #8
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

Если отключить всю оптимизацию (иначе отладчик VS будет глючить) и включить генерацию отладочной информации, то вполне можно и в релизе отлаживать. Но смысл?
zergtmn вне форума   Ответить с цитированием
Старый 07.09.2010, 20:59   #9
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Отладку всегда делаю в релизе, глюков не наблюдал.
virusav вне форума   Ответить с цитированием
Старый 07.09.2010, 21:48   #10
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

<reseved>
Миниатюры
Нажмите на изображение для увеличения
Название: 5.JPG
Просмотров: 1654
Размер:	19.4 Кб
ID:	639   Нажмите на изображение для увеличения
Название: 6.JPG
Просмотров: 1627
Размер:	9.5 Кб
ID:	644   Нажмите на изображение для увеличения
Название: 7.JPG
Просмотров: 1639
Размер:	28.0 Кб
ID:	645   Нажмите на изображение для увеличения
Название: 8.JPG
Просмотров: 1648
Размер:	51.1 Кб
ID:	646   Нажмите на изображение для увеличения
Название: 9.JPG
Просмотров: 1667
Размер:	41.7 Кб
ID:	647  

__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 08.09.2010 в 01:55.
partizanes вне форума   Ответить с цитированием
Старый 07.09.2010, 22:32   #11
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Отладку всегда делаю в релизе, глюков не наблюдал.
Стоит только включить оптимизацию...
http://img411.imageshack.us/img411/5412/gggoo.png
zergtmn вне форума   Ответить с цитированием
Старый 08.09.2010, 02:51   #12
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Отличный мануал, всем спасибо.
Топикстартеру:
6)Не Забываем положить в папку bin\Win32_Debug\
Достаточно положить один конфиг, рилмд рапускать из рабочей папки сервера, а путь до ДБЦ и карт прописать в конфиге
KiriX вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
partizanes (08.09.2010)
Старый 08.09.2010, 12:04   #13
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Путь к картам и дбц понятно,а вот насчет запуска реалмд ,наверно и так можно?
Примечание: Возможно можно еще и так -


и насчет этих библиотек ,нужны они или нет?
3)Также по информации вроде как нужны sumbol библиотеки

DEBUG- Options and Sеttings
скачиваются прямо из этого же меню,устанавливаются сами
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 08.09.2010, 13:14   #14
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Да это я читал. рилмд пусть прямо во время компила будет запущен из рабочей папки серва (редко его дебажат), а в папку, откуда будет запускаться только что скомпиленный серв, туда только конфиг.
KiriX вне форума   Ответить с цитированием
Старый 08.09.2010, 16:37   #15
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Цитата:
Сообщение от KiriX Посмотреть сообщение
Да это я читал. рилмд пусть прямо во время компила будет запущен из рабочей папки серва (редко его дебажат), а в папку, откуда будет запускаться только что скомпиленный серв, туда только конфиг.
так вот в том то и вопрос..если поставить в конфигурации проекта - mangosd - start without debuging
realmd - start

то дебажится будет именно mangosd ,а реалмд будет просто запущен
единственное тут тоже нужно указывать рабочую папку в конфигурации realmd

Не знаю как лучше - это просто как вариант
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 09.09.2010, 05:24   #16
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

А "налету" в дебаге код нельзя менять?
А то я тут задолбался выискивая тормозящие строчки ради одной строки пересобирать мангос и запускать его
KiriX вне форума   Ответить с цитированием
Старый 09.09.2010, 09:19   #17
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Я так обычно и делаю.
Цитата:
When Hit - когда бряк прокнулся, что-то сделать - например напечтать сообщение, исполнить макрос(подробнее ниже) или просто продолжить выполнение функции/процедуры/метода - как бы пропустив брекпойнт(не останавливая процесс/приложение)
Может, этот пункт можно использовать, хз.
virusav вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[10544] Output debug only note for known not implemented packets newsbot CMaNGOS Commits 0 26.09.2010 18:10
[10492] Fixed crash in debug output for some data. newsbot CMaNGOS Commits 0 16.09.2010 23:40
[10395] No debug log output when a certain ability is active newsbot CMaNGOS Commits 0 21.08.2010 19:22
[Manual]Основы правки спеллов Gerald Новичкам 0 14.03.2010 01:00


Текущее время: 00:42. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot