Mod [dll] debbuger

Автор темы #1
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
Деббагер для скриптов.
Открывает окно с остановкой работы сервера, и выводом всего стэка функций, переменных, значений переменных и прочим.

Версия рабочая, то есть не конечная.

Используется SDL2, а посему требует наличие его библиотек.
Ссылки на скачивание:
https://www.libsdl.org/download-2.0.php
https://www.libsdl.org/projects/SDL_ttf/

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

При клике по строке с переменной ее имя дописывается в конец строки консоли с пробелом.

Функция для точки остановки из скрипта:
#pragma bindfunc "void Debbuger_BreakPoint() -> FODebbuger.dll Debbuger_BreakPoint"

Новые версии в следующих постах.
 

Вложения

Последнее редактирование:
Автор темы #2
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
При использовании обнуляйте в конфиге переменную отвечающую за время выполнения скрипта, __ScriptRunSuspendTimeout иначе после выхода из точки остановки скрипт будет завершен из-за превышения таймаута.
 
Автор темы #3
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
Добавлен корректный вывод значений для массивов, ассоциативных контейнеров и строк. Короткое описание криттера теперь выводит айди и имя криттера, вместо адреса переменной.
 

Вложения

Автор темы #6
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
Новая версия библиотеки под старые ревизии ( тестилась на мк2 версии сервера, Версия ангел скрипта 2.29.1 WIP, строки однобайтовые )
Под новые ревизии будет позднее.

Фиксы:
- Пофикшен баг с рспознаванием строки под курсором. ( в случаях когда на экран не помещалась вся деббаг информация мышка всегда хранила данные последней переменной )
- При старте окна консоль не активна.
- Перенос деббаг информации под мышкой теперь происходит только по левому клику мышки.

Добавлено:
- Добавлена возможность скроллить текст колесом мышки.
- При не активной консоли левый клие по переменной автоматически переходит в стадию проверки переменной.

- Добавлена функция для скриптов void LoadScriptModule(ScriptString& moduleName) для подгрузки модуля в реальном времени. ( предкомпиляция пока не поддерживается, то есть все дефайны\макросы\инклюды и прагмы в коде файла будут выкидывать ошибки )
- Добавлена функция для скриптов void UnloadScriptModule(ScriptString& moduleName) для выгрузки модуля в реальном времени. ( Не используйте для выгрузки модулей подгруженных движком, так как данные о них останутся висеть в движке, и при обращении к ним сервер выдаст ошибку и закончит работу )
- Добавлена функция для скриптов void ReloadScriptModule( ScriptString& moduleName ) для перезагрузки модуля в реальном времени. ( вызывает поочередно UnloadScriptModule, затем LoadScriptModule )
- Добавлена функция для скриптов void ReloadFunction(ScriptString& moduleName, ScriptString& funcName) для перезагрузки функции из модуля в реальном времени. ( можно использовать для движковых модулей, предкомпиляция не поддерживается. Код функции должен находится в отдельном файле, путь берется по следующей формуле ( ".\\scripts\\dynamic\\" + moduleName + "\\" + funcName + ".func" ) ). Так-же данной функцией можно дописывать модули.
 

Вложения

Последнее редактирование:
Автор темы #7
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
Версия для новых ревизий.

Так-же в данной версии пофикшен баг с порчей памяти сервера, и изменилась функция ReloadFunction на:
void ReloadFunction(ScriptString& moduleName, ScriptString& funcdecl, ScriptString& code)

Где funcdecl это декларация функции ( если функция с декларацией существует, будет перезапись, если не существует, станет существовать )
code код функции, начиная с декларации, заканчивая закрывающей скобкой.
Пример вызова функции:

ReloadFunction( "debug",
"void MyReloadFunction(Critter&,int,int,int)",
"void MyReloadFunction(Critter&,int,int,int){Log("Im reloaded!");}" );
 

Вложения

Последнее редактирование:
Автор темы #8
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
Новая версия библиотеки под старые ревизии ( тестилась на мк2 версии сервера, Версия ангел скрипта 2.29.1 WIP, строки однобайтовые )
Под новые ревизии будет позднее.

- Исправлен баг с порчей памяти.
- Исправлен вывод русского текста в консоль, и удаление его с консоли.

- Добавлена консольная команда run module func. Команда запускает функцию с модуля, пока без аргументов, функция должна иметь декларацию вида void Func().
- В скриптовом движке регистрируется перечисление ( enum ) FODebbuger_ColorIndex, имеет следующие значения:
FONT_COLOR, - Цвет текста.
SELECT_COLOR, - Цвет выделенного текста.
IFACE_COLOR, - Цвет элементов интерфейса ( пока линия разделяющая области окон )
BACKGROUND_COLOR - Цвет фона.

- Добавлена возможность задавать опции деббагера. Для этого есть ряд функций:
void SetColor(FODebbuger_ColorIndex color, uint8 r, uint8 g, uint8 b, uint8 a) - Задает цвет.
void ReloadFont(ScriptString& fontName, int size); - устанавливаетшрифт, и его размер.
void ResizeWindows(int x, int y, int mainWindowsX, int mainWindowsY); - Устанавливает разрешение окна, и размеры рабочей области.

- Изменилась функция ReloadFunction на:
void ReloadFunction(ScriptString& moduleName, ScriptString& funcdecl, ScriptString& code)

- Что-то еще.
 

Вложения

Автор темы #9
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
Есть реквесты, замечания, что-то еще?
Хотелось бы какой-то обратной связи чтоли.
 
Автор темы #11
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
Версия под ревизию 461. Все обновления для старой версии будут позже.
Если на вашей версии что-то не работает, или вообще не запускается, можете сообщить, соберу под нее.

- Небольшие изменения в интерфейсе.
- Изменена команда run. Теперь можно передавать в вызываемую функцию аргументы, их следует поочередно дописывать в команду, а декларация функции должна соответствовать количеству и типам аргументов. Переменные можно брать только из памяти, ручной ввод циферок и строк пока не поддерживается. Возвращаемый тип функции только void.
Вид команд: run module func arg0 arg1 ....

- Добавлена консольная команда перезагружающая скриптовый модуль: reload module moduleName где moduleName имя модуля.

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

- Добавлена скриптовая команда EXPORT void InfoASEngine(ScriptString* moduleName);
Выводит информацию о всех переменных, методов, функциях и прочем в лог сервера. Если moduleName == NULL, то выводит информацию о движке, иначе о модуле.
 

Вложения

Автор темы #12
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
Теперь версии под новую ревизию и старую буду выкладывать одновременно. Под старую ревизию буду помечать как "(old)" в названии архива.
Версия без этой пометки будет актуальной для последней ( на момент публикации ) ревизии сдк.
Версия под Linux будет когда нибудь потом.

Обновления:
- Команда "run moduleName funcName arg ..." теперь открывает новое окно в деббагере, в котором выводится весь стек вызова ( с переменными и прочими ), текущая позиция выполнения, время выполнения ( может не верно выводится если вызвать точку остановку в скрипте вызванном через деббагер ) и код следующей линии выполнения ( код берется из файла fosp, поэтому в некоторых случаях может быть некорректным ).
- Добавлена команда "run block moduleName funcName arg ..." - идентична команде выполнения скрипта, но при этом скрипт выполняется построчно, после каждой строки прерывается до отдачи комманды продолжить.
- Добавлена команда "close context" - закрывает текущий скриптовый контекст.
- Добавлена команда "next line" - продолжает выполнение прерванного скрипта.
- Добавлена команда "help" - выводит информацию по командам на экран деббагера ( на убогом английском, ага ).
- Добавлена команда "info engine" - выводит информацию о скриптовом движке.
- Исправлен баг приводящий к падению сервера после вызова функции InfoASEngine с нулевым аргументом.
- Добавлена команда "info moduleName" - выводит информацию о модуле.
- Исправлена работа перезагрузки функции.

- Добавлена история введеных в консоль команд. Стрелки вверх и вниз при активной консоли "листают" историю выводя введеные команды в консоль.
- Дополнен метод подбора имени типа, теперь примитивные типы корректно выводят свое название. ( например в кратком описании массива выводились айди типа, вместо имени )
- Ряд исправлений интерфейса.
- Ряд багфиксов.

Известные баги:
В новой версии:
В связи с некорректным распознованием строки в "родных" скриптах движка код следующей строки в окне выполнения скрипта не будет выводится. Можно исправить перезагрузив модуль средствами деббагера.

В старой версии:
Русский текст из скриптов не верно выводится на экран. Скорее всего исправлятся не будет.
Дамп при перезагрузки или выгрузки "родного" скриптового модуля. Пока обойти нельзя, возможно исправлю в будущем.
 

Вложения

Дата рег
30 Янв 2015
Сообщения
165
Симпатии
1
Debugger вроде установил, наверное как-то не так.


FODebbuger.pdb FODebbuger.dll бросил в скрипты

SDL2.dll SDL2_ttf бросил в system32

#pragma bindfunc "void Debbuger_BreakPoint() -> FODebbuger.dll Debbuger_BreakPoint" вписал в _defines

Как я понял консоль запускается после нажатия на Enter.
В консоли я набрал ~checkvar Debug мне выводит Invalid arguments.....

Что я сделал неправильно? Не могу воспользоваться Debugger
 
Последнее редактирование:
Дата рег
30 Янв 2015
Сообщения
165
Симпатии
1
Я вообще всё правильно сделал? Debugger так устанавливается, запускается и проверяется?
 
Последнее редактирование:
Дата рег
30 Янв 2015
Сообщения
165
Симпатии
1
Последнее редактирование:
Автор темы #17
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
Нужно вызвать точку остановки из скрипта ( вызвать функцию Debbuger_BreakPoint() ), откроется окно деббагера со своей консолью.
 
Дата рег
30 Янв 2015
Сообщения
165
Симпатии
1
Спасибо за ответ. Вот пробую ~run Debugger_BreakPoint(), пока не получается, там указано ещё имя модуля написать, ~run _defines Debugger_BreakPoint() или ~FODebbuger.dll Debbuger_BreakPoint(), не запускается. Просто ~Debugger_BreakPoint() не работает. Может разберусь если у меня версия та. Я думаю для ревизии 472 он должен работать или я ошибся в этом тоже
 
Последнее редактирование:
Дата рег
30 Янв 2015
Сообщения
165
Симпатии
1
А синтаксис команды какой? Не могли бы вы точно написать. Просто ~Debbuger_BreakPoint() ничего не запускает. Не совсем понимаю как команду вызывать из скриптов. Я её вызывал прямо в игре в первой локации, там же все скрипты локации автоматически подключены.
 
Дата рег
5 Ноя 2011
Сообщения
118
Симпатии
40
В нужном месте скрипта в fos файле прописать Debbuger_BreakPoint(); при исполнении этого скрипта когда дойдет дело до строки с Debbuger_BreakPoint();

откроется окно деббагера со своей консолью.
 
Дата рег
4 Авг 2016
Сообщения
162
Симпатии
30
Штука полезная. Не планируется ли возобновление работы над деббагером под актуальные ревизии?
 
Автор темы #24
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
Штука полезная. Не планируется ли возобновление работы над деббагером под актуальные ревизии?
Я не работаю с актуальными ревизиями, + потерял исходники. Если и буду делать по новой, то не факт что с поддержкой актуальных ревизий.