diff --git a/README.md b/README.md index 09927bd..eb60326 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,11 @@ # DebugTools - Просмотр переменных по указателям +## Содержание +1. [Описание модуля](#программный-модуль-debugtools) +2. [Описание приложения для настройки](#debugvaredit---настройка-переменных) +3. [Описание терминалки для считывания](#debugvarterminal---считывание-переменных-для-tms) +4. [Для разработчиков](#для-разработчиков) + +# Программный модуль DebugTools Модуль состоит из трех файлов: - **debug_tools.c** - реализация считывания переменных - **debug_tools.h** - объявление всякого для считывания переменных @@ -9,11 +16,26 @@ Для чтения переменных можно использовать функции: ```c +/* Читает значение переменной по индексу */ int Debug_ReadVar(int var_ind, int32_t *return_long); -int Debug_ReadVarName(int var_ind, DebugVarName_t name_ptr); -``` +/* Читает имя переменной по индексу */ +int Debug_ReadVarName(int var_ind, DebugVarName_t name_ptr, int *length); +/* Читает возвращаемый тип (IQ) переменной по индексу */ +int Debug_ReadVarReturnType(int var_ind, int *vartype); +/* Читает тип переменной по индексу */ +int Debug_ReadVarType(int var_ind, int *vartype); +/* Читает значение переменной с нижнего уровня */ +int Debug_LowLevel_ReadVar(int32_t *return_long); +/* Инициализирует отладку нижнего уровня */ +int Debug_LowLevel_Initialize(DateTime_t *external_date); +/* Читает возвращаемый тип (IQ) низкоуровнено заданной переменной */ +int Debug_LowLevel_ReadVarReturnType(int *vartype); +/* Читает тип низкоуровнено заданной переменной.*/ +int Debug_LowLevel_ReadVarType(int *vartype); +``` + Переменные доступные для чтения определяются в **debug_vars.c** (их можно прописывать вручную или генерировать через **DebugVarEdit**): ```c @@ -32,6 +54,26 @@ DebugVar_t dbg_vars[] = {\ }; ``` +## LowLevel - Просмотр абсолютно любых переменных +Также присутствует утилита `parse_xml.exe`, которая генерирует `.xml` файл с всеми переменными в программе и их адрессами +Для её подключения: +- В Pre-Build Steps добавить следующую команду. Это удаление `debug_tools.obj` файла для его перекомпиялции с актуальной датой компиляции +``` +cmd /c del /Q "${CWD}\Src\DebugTools\debug_tools.obj" +``` +- В Post-Build Steps добавить следующую команду. Это: + - формирование с помощью утилиты компилятора `ofd2000` `.xml` файла с полной отладочной информацией. + - формирование отладочной информации в текстовом файле (для получения таймштампа) + - запуск утилиты `parse_xml.exe` для формирования итогового `_allVars.xml` с информацией о переменных и адресах + +``` +"${CG_TOOL_ROOT}/bin/ofd2000" --obj_display=symbols --dwarf --dwarf_display=all --xml --xml_indent=1 --output="${BuildArtifactFileBaseName}_ofd_dump.xml" "${BuildArtifactFilePath}" +"${CG_TOOL_ROOT}/bin/ofd2000" "${BuildArtifactFilePath}" > ${CCS_PROJECT_DIR}/bin/temp.txt +"${CCS_PROJECT_DIR}/Src/DebugTools/parse_xml/parse_xml.exe" ${BuildArtifactFileBaseName}_ofd_dump.xml ${CCS_PROJECT_DIR}/bin/temp.txt ${BuildArtifactFileBaseName}_allVars.xml" +``` +После, с использованием терминалки можно прочитать любые переменные по адресам. (должен совпадать таймштапм в прошивке и `.xml` файла, иначе контроллер ответит ошибкой) + + # DebugVarEdit - Настройка переменных **DebugVarEdit** — графическое приложение для Windows, предназначенное для настройки и генерации отладочных переменных (`debug_vars.c`) на основе исходного C-проекта. Работает с `makefile` проекта, сохраняет изменения в XML и позволяет удобно редактировать переменные и их типы через интерфейс. @@ -113,6 +155,68 @@ DebugVar_t dbg_vars[] = {\ ``` --- + + +# DebugVarTerminal - Считывание переменных (для TMS) +**DebugVarTerminal** — терминалка для считывания переменных по RS-232 протоколу RS_Functions. +Программа — один исполняемый файл `DebugVarTerminal.exe`, не требующий установки и дополнительных зависимостей. +> Требуется Windows 7 или новее. + +--- + +## Как использовать приложение + +1. Запустите **DebugVarTerminal.exe.** + +2. Выберите COM Port и скорость Baud. Нажмиите **Open** + +3. Для считывания переменных заданных в `*debug_vars.c`: + - Откройте вкладку **Watch**. + - Выберите стартовый индекс переменной и количество переменных для считывания. + - Нажмите одну из кнопок: + - **Update Service** - считывает информацию об именах и возвращаемых IQ типах переемнных + - **Read Value(s)** - считывает и форматирует значения переменных в соответствии с IQ типами + - **Start Polling** - начать опрос выбранных переменных с заданным интервалом. При старте опроса, имя и тип переменных считываются автоматически + +4. Для считывания переменных по адресам: + - Откройте вкладку **LowLevel**. + - Выберите `projname_allVars.xml` в папке bin рядом с бинарником. Из него подгрузятся все доступные для считывания переменные + - Выберите переменные кнопкной **Выбрать переменные** + - Задайте IQ тип и возвращаемый IQ тип если требуется + - Нажмите одну из кнопок: + - **Read Once** - считывает выбранные переменные один раз + - **Start Polling** - начать опрос выбранных переменных с заданным интервалом + +5. Запись в CSV: + - Можно записывавать считываемые переменные в CSV файл, с разделителем `;` + - Нажмите кнопку **Начать запись в CSV** + - Когда нужная выборка будет накоплена нажмите **Остаовить запись в CSV** + - Нажмите **Выбрать файл CSV** для выбора пути для сохранения файла и нажмите **Сохранить данные в CSV** чтобы сохранить + - Генерируется совместимый с LogView `.csv` файл + + Все параметры выбираются из выпадающих списков, которые можно настроить, чтобы отображались только нужные опции. + +--- + +## Возможности +Режим "Watch": +- Быстрое и удобное чтение одной или нескольких переменных по их индексу. +- Автоматическое получение имен, типов и параметров масштабирования (IQ) переменных. +- Запуск постоянного опроса для отслеживания изменений значений в реальном времени. +- Наглядное представление данных в таблице с отображением как сырых, так и масштабированных значений. +Режим "LowLevel": +- Прямое чтение данных из памяти по заданным адресам. +- Возможность указания типов указателей, IQ-масштабирования и форматов возвращаемых данных. +- Аналогично режиму "Watch", поддерживается постоянный опрос выбранных низкоуровневых переменных. +- Умное автодополнение имён переменных и полей структур. +Логирование в CSV +- Записывайте все полученные значения в файл формата CSV для последующего анализа. +- Легкое управление записью: запуск, остановка и сохранение данных в любой момент. + +--- + + + --- # Для разработчиков @@ -122,19 +226,25 @@ DebugVar_t dbg_vars[] = {\ ```bash Src ├── build/ -│ └── build_and_clean.py # Билдинг проекта в .exe (через nuitka или pyinstaller) -├── DebugVarEdit_GUI.py # Главное окно -├── var_table.py # Таблица выбранных переменных -├── var_selector_window.py # Окно выбора переменных -├── var_selector_table.py # Таблица переменных в окне выбора переменных -├── scan_progress_gui.py # Отображение процесса сканирования переменных -├── scan_vars.py # Сканирование переменных среди .c/.h файлов -├── generate_debug_vars.py # Генерация debug_vars.c -├── myXML.py # Утилиты для XML -├── makefile_parser.py # Парсинг makefile на .c/.h файлы -├── var_setup.py # Подготовка переменных для окна выбора переменных -├── libclang.dll # Бибилиотека clang -├── icon.ico # Иконка +│ └── build_and_clean.py # Билдинг проекта в .exe (через nuitka или pyinstaller) +├── DebugVarEdit_GUI.py # Главное окно +├── tms_debugvar_term.py # Терминал DebugVarTerminal +├── tms_debugvar_lowlevel.py # Виджет для выбора переменных для LowLevel Watch +├── var_table.py # Таблица выбранных переменных +├── var_selector_window.py # Окно выбора переменных +├── var_selector_table.py # Таблица переменных в окне выбора переменных +├── scan_progress_gui.py # Отображение процесса сканирования переменных +├── scan_vars.py # Сканирование переменных среди .c/.h файлов +├── generate_debug_vars.py # Генерация debug_vars.c +├── allvars_xml_parser.py # Парсинг XML со всеми переменными и структурами +├── csv_logger.py # Логирование переменных в CSV +├── myXML.py # Утилиты для XML +├── makefile_parser.py # Парсинг makefile на .c/.h файлы +├── var_setup.py # Подготовка переменных для окна выбора переменных +├── path_hints.py # Подсказки для автодополнения путей переменных +├── libclang.dll # Бибилиотека clang +├── icon.ico # Иконка + ``` ### Зависимости @@ -161,7 +271,7 @@ Src - Очищает временные папки после сборки: - `build_temp` - `__pycache__` - - `DebugVarEdit_GUI.*` + - `.*` > Все пути, имена файлов, временные папки и выбор между Nuitka и PyInstaller можно настроить в начале файла `build_and_clean.py`. diff --git a/Src/README_DEVELOP.md b/Src/README_DEVELOP.md index da109f9..cd2e93d 100644 --- a/Src/README_DEVELOP.md +++ b/Src/README_DEVELOP.md @@ -1,3 +1,4 @@ + # Для разработчиков ### Структура проекта: @@ -5,33 +6,39 @@ ```bash Src ├── build/ -│ └── build_and_clean.py # Билдинг проекта в .exe (через nuitka или pyinstaller) -├── DebugVarEdit_GUI.py # Главное окно -├── var_table.py # Таблица выбранных переменных -├── var_selector_window.py # Окно выбора переменных -├── var_selector_table.py # Таблица переменных в окне выбора переменных -├── scan_progress_gui.py # Отображение процесса сканирования переменных -├── scan_vars.py # Сканирование переменных среди .c/.h файлов -├── generate_debug_vars.py # Генерация debug_vars.c -├── myXML.py # Утилиты для XML -├── makefile_parser.py # Парсинг makefile на .c/.h файлы -├── var_setup.py # Подготовка переменных для окна выбора переменных -├── libclang.dll # Бибилиотека clang -├── icon.ico # Иконка +│ └── build_and_clean.py # Билдинг проекта в .exe (через nuitka или pyinstaller) +├── DebugVarEdit_GUI.py # Главное окно +├── tms_debugvar_term.py # Терминал DebugVarTerminal +├── tms_debugvar_lowlevel.py # Виджет для выбора переменных для LowLevel Watch +├── var_table.py # Таблица выбранных переменных +├── var_selector_window.py # Окно выбора переменных +├── var_selector_table.py # Таблица переменных в окне выбора переменных +├── scan_progress_gui.py # Отображение процесса сканирования переменных +├── scan_vars.py # Сканирование переменных среди .c/.h файлов +├── generate_debug_vars.py # Генерация debug_vars.c +├── allvars_xml_parser.py # Парсинг XML со всеми переменными и структурами +├── csv_logger.py # Логирование переменных в CSV +├── myXML.py # Утилиты для XML +├── makefile_parser.py # Парсинг makefile на .c/.h файлы +├── var_setup.py # Подготовка переменных для окна выбора переменных +├── path_hints.py # Подсказки для автодополнения путей переменных +├── libclang.dll # Бибилиотека clang +├── icon.ico # Иконка + ``` ### Зависимости Для запуска приложения: - **Python 3.7+** -- **clang** — используется для парсинга C-кода (требуется `libclang.dll`) +- **clang** — используется для парсинга C-кода (требуется `libclang.dll`, лежит в папке Src) - **PySide2** — GUI-фреймворк - **lxml** — работа с XML > Python 3.7 и PySide2 рекомендуется для совместимости с Windows 7 Для сборки `.exe`: - **Nuitka** — создает полностью автономный `.exe` без внешних зависимостей -- **PyInstaller** — создает `.exe` с зависимостью от `pythonXX.dll` (Python должен быть установлен) +- **PyInstaller** — создает `.exe` с зависимостью от `pythonXX.dll` (Python должен быть установлен для запуска `.exe`) ### Сборка: @@ -44,12 +51,12 @@ Src - Очищает временные папки после сборки: - `build_temp` - `__pycache__` - - `DebugVarEdit_GUI.*` + - `.*` > Все пути, имена файлов, временные папки и выбор между Nuitka и PyInstaller можно настроить в начале файла `build_and_clean.py`. ### Установка зависимостей ```bash -pip install PySide2 lxml nuitka pyinstaller +pip install clang PySide2 lxml nuitka pyinstaller ``` \ No newline at end of file