| Родител: Development Topics | Documentation Index |
Този документ описва различните начини за дебъгване на Daqster приложението, когато то е пакетирано като AppImage.
Най-лесният начин за дебъгване е да използваш Debug AppImage-а, който се създава автоматично в CI.
# Debug AppImage има debug символи
./Daqster-Debug-x86_64.AppImage
# Можеш да го дебъгваш директно с GDB
gdb ./Daqster-Debug-x86_64.AppImage
GDB (GNU Debugger) е най-мощният инструмент за дебъгване на C++ приложения.
# Стартирай AppImage с GDB
gdb ./Daqster-x86_64.AppImage
# В GDB:
(gdb) set environment LD_LIBRARY_PATH=/tmp/.mount_Daqster*/usr/lib
(gdb) run
# или с конкретен plugin
(gdb) run --args QtCoinTrader
# Постави breakpoint
(gdb) break main
(gdb) break QPluginManager::LoadPlugin
# Следвай изпълнението
(gdb) step
(gdb) next
(gdb) continue
# Покажи stack trace
(gdb) bt
# Покажи променливи
(gdb) print variable_name
(gdb) info locals
# Излез
(gdb) quit
Valgrind е отличен инструмент за откриване на memory leaks и други memory проблеми.
# Проверка за memory leaks
valgrind --leak-check=full ./Daqster-x86_64.AppImage
# Или с конкретен plugin
valgrind --leak-check=full ./Daqster-x86_64.AppImage QtCoinTrader
# Детайлна проверка
valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./Daqster-x86_64.AppImage
# Проверка за race conditions
valgrind --tool=helgrind ./Daqster-x86_64.AppImage
Можеш да включиш debug output чрез environment variables.
# Включи Qt plugin debugging
QT_DEBUG_PLUGINS=1 ./Daqster-x86_64.AppImage
# Включи Qt logging
QT_LOGGING_RULES="*=true" ./Daqster-x86_64.AppImage
# Включи QML debugging
QML_IMPORT_TRACE=1 ./Daqster-x86_64.AppImage
# Включи нашите debug съобщения
DAQSTER_DEBUG=1 ./Daqster-x86_64.AppImage
# Или с конкретен plugin
DAQSTER_DEBUG=1 ./Daqster-x86_64.AppImage QtCoinTrader
# Покажи всички environment variables
env | grep -E "(QT|DAQSTER)"
# Включи verbose output
VERBOSE=1 ./Daqster-x86_64.AppImage
Можеш да извлечеш AppImage в директория и да дебъгваш директно изпълнимия файл.
# 1. Извлечи AppImage
./Daqster-x86_64.AppImage --appimage-extract
# 2. Сега имаш squashfs-root/ директория
ls -la squashfs-root/
# 3. Дебъгвай директно изпълнимия файл
gdb ./squashfs-root/usr/bin/Daqster
# 4. Настрой environment variables
export LD_LIBRARY_PATH=$(pwd)/squashfs-root/usr/lib
export QT_PLUGIN_PATH=$(pwd)/squashfs-root/usr/lib/plugins
export DAQSTER_PLUGIN_DIR=$(pwd)/squashfs-root/usr/lib/daqster/plugins
Qt Creator е отличен IDE за дебъгване на Qt приложения.
./Daqster-x86_64.AppImage --appimage-extract
squashfs-root/usr/bin/Daqsterexport LD_LIBRARY_PATH=/path/to/squashfs-root/usr/lib
export QT_PLUGIN_PATH=/path/to/squashfs-root/usr/lib/plugins
export DAQSTER_PLUGIN_DIR=/path/to/squashfs-root/usr/lib/daqster/plugins
strace проследява системните извиквания на приложението.
# Проследи всички системни извиквания
strace ./Daqster-x86_64.AppImage
# Проследи само file операции
strace -e trace=file ./Daqster-x86_64.AppImage
# Проследи с конкретен plugin
strace -e trace=file ./Daqster-x86_64.AppImage QtCoinTrader
# Запиши в файл
strace -o daqster_trace.log ./Daqster-x86_64.AppImage
# Покажи само грешки
strace -e trace=file -e trace=network -e trace=process
# Покажи timing информация
strace -t ./Daqster-x86_64.AppImage
# Покажи PID на процесите
strace -p ./Daqster-x86_64.AppImage
Можеш да запишеш debug output в файлове за по-лесно анализиране.
# Пренасочи debug output към файл
./Daqster-x86_64.AppImage 2>&1 | tee daqster_debug.log
# Или с конкретен plugin
./Daqster-x86_64.AppImage QtCoinTrader 2>&1 | tee plugin_debug.log
# С timestamp
./Daqster-x86_64.AppImage 2>&1 | while IFS= read -r line; do echo "$(date): $line"; done | tee daqster_timestamped.log
# Търси за грешки
grep -i error daqster_debug.log
# Търси за warnings
grep -i warning daqster_debug.log
# Покажи последните 50 реда
tail -50 daqster_debug.log
# Покажи редове с конкретен текст
grep "Plugin" daqster_debug.log
Можеш да поставиш breakpoints в кода за по-детайлно дебъгване.
gdb ./Daqster-x86_64.AppImage
(gdb) break main
(gdb) break QPluginManager::LoadPlugin
(gdb) break ApplicationsManager::StartApplication
(gdb) run
# Breakpoint само когато условие е изпълнено
(gdb) break QPluginManager::LoadPlugin if pluginName == "QtCoinTrader"
# Breakpoint след определен брой извиквания
(gdb) break QPluginManager::LoadPlugin
(gdb) ignore 1 5 # Игнорирай първите 5 извиквания
# Провери AppImage
file Daqster-x86_64.AppImage
# Покажи съдържанието
./Daqster-x86_64.AppImage --appimage-extract
ls -la squashfs-root/
# Провери библиотеките
ldd squashfs-root/usr/bin/Daqster
# Провери дали plugins са намерени
./Daqster-x86_64.AppImage 2>&1 | grep -i plugin
# Провери plugin paths
./Daqster-x86_64.AppImage 2>&1 | grep -i "search paths"
# Покажи environment variables
env | grep -E "(QT|DAQSTER|APPIMAGE)"
# Покажи mounted AppImage
ls -la /tmp/.mount_*
Debug AppImage-ът е най-добрият избор за дебъгване, но всички методи имат своето място в различни ситуации. Избери този, който най-добре отговаря на твоите нужди!
За въпроси или проблеми, моля отвори issue в GitHub repository-то.