Обновлены readme
This commit is contained in:
parent
502046091c
commit
910bf0a585
142
README.md
142
README.md
@ -1,4 +1,11 @@
|
|||||||
# DebugTools - Просмотр переменных по указателям
|
# DebugTools - Просмотр переменных по указателям
|
||||||
|
## Содержание
|
||||||
|
1. [Описание модуля](#программный-модуль-debugtools)
|
||||||
|
2. [Описание приложения для настройки](#debugvaredit---настройка-переменных)
|
||||||
|
3. [Описание терминалки для считывания](#debugvarterminal---считывание-переменных-для-tms)
|
||||||
|
4. [Для разработчиков](#для-разработчиков)
|
||||||
|
|
||||||
|
# Программный модуль DebugTools
|
||||||
Модуль состоит из трех файлов:
|
Модуль состоит из трех файлов:
|
||||||
- **debug_tools.c** - реализация считывания переменных
|
- **debug_tools.c** - реализация считывания переменных
|
||||||
- **debug_tools.h** - объявление всякого для считывания переменных
|
- **debug_tools.h** - объявление всякого для считывания переменных
|
||||||
@ -9,11 +16,26 @@
|
|||||||
Для чтения переменных можно использовать функции:
|
Для чтения переменных можно использовать функции:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
|
/* Читает значение переменной по индексу */
|
||||||
int Debug_ReadVar(int var_ind, int32_t *return_long);
|
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**):
|
Переменные доступные для чтения определяются в **debug_vars.c** (их можно прописывать вручную или генерировать через **DebugVarEdit**):
|
||||||
|
|
||||||
```c
|
```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` для формирования итогового `<projname>_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 - Настройка переменных
|
||||||
**DebugVarEdit** — графическое приложение для Windows, предназначенное для настройки и генерации отладочных переменных (`debug_vars.c`) на основе исходного C-проекта. Работает с `makefile` проекта, сохраняет изменения в XML и позволяет удобно редактировать переменные и их типы через интерфейс.
|
**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
|
```bash
|
||||||
Src
|
Src
|
||||||
├── build/
|
├── build/
|
||||||
│ └── build_and_clean.py # Билдинг проекта в .exe (через nuitka или pyinstaller)
|
│ └── build_and_clean.py # Билдинг проекта в .exe (через nuitka или pyinstaller)
|
||||||
├── DebugVarEdit_GUI.py # Главное окно
|
├── DebugVarEdit_GUI.py # Главное окно
|
||||||
├── var_table.py # Таблица выбранных переменных
|
├── tms_debugvar_term.py # Терминал DebugVarTerminal
|
||||||
├── var_selector_window.py # Окно выбора переменных
|
├── tms_debugvar_lowlevel.py # Виджет для выбора переменных для LowLevel Watch
|
||||||
├── var_selector_table.py # Таблица переменных в окне выбора переменных
|
├── var_table.py # Таблица выбранных переменных
|
||||||
├── scan_progress_gui.py # Отображение процесса сканирования переменных
|
├── var_selector_window.py # Окно выбора переменных
|
||||||
├── scan_vars.py # Сканирование переменных среди .c/.h файлов
|
├── var_selector_table.py # Таблица переменных в окне выбора переменных
|
||||||
├── generate_debug_vars.py # Генерация debug_vars.c
|
├── scan_progress_gui.py # Отображение процесса сканирования переменных
|
||||||
├── myXML.py # Утилиты для XML
|
├── scan_vars.py # Сканирование переменных среди .c/.h файлов
|
||||||
├── makefile_parser.py # Парсинг makefile на .c/.h файлы
|
├── generate_debug_vars.py # Генерация debug_vars.c
|
||||||
├── var_setup.py # Подготовка переменных для окна выбора переменных
|
├── allvars_xml_parser.py # Парсинг XML со всеми переменными и структурами
|
||||||
├── libclang.dll # Бибилиотека clang
|
├── csv_logger.py # Логирование переменных в CSV
|
||||||
├── icon.ico # Иконка
|
├── 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`
|
- `build_temp`
|
||||||
- `__pycache__`
|
- `__pycache__`
|
||||||
- `DebugVarEdit_GUI.*`
|
- `<MAIN_SCRIPT_NAME>.*`
|
||||||
|
|
||||||
> Все пути, имена файлов, временные папки и выбор между Nuitka и PyInstaller можно настроить в начале файла `build_and_clean.py`.
|
> Все пути, имена файлов, временные папки и выбор между Nuitka и PyInstaller можно настроить в начале файла `build_and_clean.py`.
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
# Для разработчиков
|
# Для разработчиков
|
||||||
|
|
||||||
### Структура проекта:
|
### Структура проекта:
|
||||||
@ -5,33 +6,39 @@
|
|||||||
```bash
|
```bash
|
||||||
Src
|
Src
|
||||||
├── build/
|
├── build/
|
||||||
│ └── build_and_clean.py # Билдинг проекта в .exe (через nuitka или pyinstaller)
|
│ └── build_and_clean.py # Билдинг проекта в .exe (через nuitka или pyinstaller)
|
||||||
├── DebugVarEdit_GUI.py # Главное окно
|
├── DebugVarEdit_GUI.py # Главное окно
|
||||||
├── var_table.py # Таблица выбранных переменных
|
├── tms_debugvar_term.py # Терминал DebugVarTerminal
|
||||||
├── var_selector_window.py # Окно выбора переменных
|
├── tms_debugvar_lowlevel.py # Виджет для выбора переменных для LowLevel Watch
|
||||||
├── var_selector_table.py # Таблица переменных в окне выбора переменных
|
├── var_table.py # Таблица выбранных переменных
|
||||||
├── scan_progress_gui.py # Отображение процесса сканирования переменных
|
├── var_selector_window.py # Окно выбора переменных
|
||||||
├── scan_vars.py # Сканирование переменных среди .c/.h файлов
|
├── var_selector_table.py # Таблица переменных в окне выбора переменных
|
||||||
├── generate_debug_vars.py # Генерация debug_vars.c
|
├── scan_progress_gui.py # Отображение процесса сканирования переменных
|
||||||
├── myXML.py # Утилиты для XML
|
├── scan_vars.py # Сканирование переменных среди .c/.h файлов
|
||||||
├── makefile_parser.py # Парсинг makefile на .c/.h файлы
|
├── generate_debug_vars.py # Генерация debug_vars.c
|
||||||
├── var_setup.py # Подготовка переменных для окна выбора переменных
|
├── allvars_xml_parser.py # Парсинг XML со всеми переменными и структурами
|
||||||
├── libclang.dll # Бибилиотека clang
|
├── csv_logger.py # Логирование переменных в CSV
|
||||||
├── icon.ico # Иконка
|
├── myXML.py # Утилиты для XML
|
||||||
|
├── makefile_parser.py # Парсинг makefile на .c/.h файлы
|
||||||
|
├── var_setup.py # Подготовка переменных для окна выбора переменных
|
||||||
|
├── path_hints.py # Подсказки для автодополнения путей переменных
|
||||||
|
├── libclang.dll # Бибилиотека clang
|
||||||
|
├── icon.ico # Иконка
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Зависимости
|
### Зависимости
|
||||||
|
|
||||||
Для запуска приложения:
|
Для запуска приложения:
|
||||||
- **Python 3.7+**
|
- **Python 3.7+**
|
||||||
- **clang** — используется для парсинга C-кода (требуется `libclang.dll`)
|
- **clang** — используется для парсинга C-кода (требуется `libclang.dll`, лежит в папке Src)
|
||||||
- **PySide2** — GUI-фреймворк
|
- **PySide2** — GUI-фреймворк
|
||||||
- **lxml** — работа с XML
|
- **lxml** — работа с XML
|
||||||
> Python 3.7 и PySide2 рекомендуется для совместимости с Windows 7
|
> Python 3.7 и PySide2 рекомендуется для совместимости с Windows 7
|
||||||
|
|
||||||
Для сборки `.exe`:
|
Для сборки `.exe`:
|
||||||
- **Nuitka** — создает полностью автономный `.exe` без внешних зависимостей
|
- **Nuitka** — создает полностью автономный `.exe` без внешних зависимостей
|
||||||
- **PyInstaller** — создает `.exe` с зависимостью от `pythonXX.dll` (Python должен быть установлен)
|
- **PyInstaller** — создает `.exe` с зависимостью от `pythonXX.dll` (Python должен быть установлен для запуска `.exe`)
|
||||||
|
|
||||||
|
|
||||||
### Сборка:
|
### Сборка:
|
||||||
@ -44,12 +51,12 @@ Src
|
|||||||
- Очищает временные папки после сборки:
|
- Очищает временные папки после сборки:
|
||||||
- `build_temp`
|
- `build_temp`
|
||||||
- `__pycache__`
|
- `__pycache__`
|
||||||
- `DebugVarEdit_GUI.*`
|
- `<MAIN_SCRIPT_NAME>.*`
|
||||||
|
|
||||||
> Все пути, имена файлов, временные папки и выбор между Nuitka и PyInstaller можно настроить в начале файла `build_and_clean.py`.
|
> Все пути, имена файлов, временные папки и выбор между Nuitka и PyInstaller можно настроить в начале файла `build_and_clean.py`.
|
||||||
|
|
||||||
### Установка зависимостей
|
### Установка зависимостей
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install PySide2 lxml nuitka pyinstaller
|
pip install clang PySide2 lxml nuitka pyinstaller
|
||||||
```
|
```
|
Loading…
Reference in New Issue
Block a user