Полностью интегрированный пример можно найти на официальном GitLab'е ОМП: демо-приложение Crasher
Для начала нужно:
Tracer собирает мета-информацию о системе, логи и дополнительные данные (пары ключ-значение), отправляя их на сервер при следующем запуске после креша.
На ОС Аврора Tracer использует минидампы, генерируемые системным пакетом crash-dumper
. Минидампы содержат системную информацию, стеки всех потоков на момент сбоя, списки загруженных файлов и другие данные.
Tracer поставляется в следующей форме:
Python3
-скрипты для загрузки отладочной информации и исполняемый файл сборщика символов,Динамическая библиотека для конкретной платформы располагается в aurora/lib/${arch}/libtracernative.so
– именно её нужно подключить к приложению, в котором вы собираетесь использовать Tracer. В папке include
лежит единственный заголовочник - tracer.h
Распакуйте библиотеку в ваш репозиторий, например в 3rdparty/tracer
:
В вашем qmake
:
ARCH = $$system($$QMAKE_CXX -dumpmachine) ARCH = $$split(ARCH, "-") ARCH = $$first(ARCH) LIBS += -L$$PWD/3rdparty/tracer/aurora/lib/$$ARCH/ -ltracernative INCLUDEPATH += $$PWD/3rdparty/tracer/include DEPENDPATH += $$PWD/3rdparty/tracer/include tracernative.path = /usr/share/$$TARGET/lib tracernative.files = 3rdparty/tracer/aurora//lib/$$ARCH/libtracernative.so INSTALLS += tracernative
Tracer предоставляем специальные скрипты для загрузкм символов в автоматическом режиме после сборки. Для платформы Aurora необходимо дополнительно модифицировать .spec
для загрузки сим волов и валидации пакета – подробнее в главе Символизация):
Инициализирует SDK с указанием ключа приложения и директории для хранения отчётов о сбоях.
Параметр | Тип | Описание |
---|---|---|
app_key | const tracer_str_char* | Ключ приложения (UTF-8 строка) |
storage_dir | const tracer_path_char* | Директория для хранения файлов сбоев (C-строка с путём) |
В вашем app.cpp
:
#include "tracer.h" int main() { const char* app_key = "your-app-key"; const tracer_path_char* storage_dir = "/path/to/crash/storage"; tracer_init(app_key, storage_dir); return 0; }
Передаёт информацию о платформе для включения в отчёты о сбоях.
Параметр | Тип | Описание |
---|---|---|
version_name | const tracer_str_char* | Название версии приложения (UTF-8 строка) |
version_code | int | Версия приложения в виде целого чис ла |
Для передачи информации о платформе в вашем main.cpp
:
#include "tracer.h" int main() { const char* version_name = "1.0.0"; int version_code = 100; const char* device = "device_name"; const char* vendor = "vendor_name"; const char* os_version = "os_version"; tracer_set_platform_info(version_name, version_code, device, vendor, os_version); return 0; }
Пример инициализации и использования Tracer в приложении:
auto data_path = Aurora::Application::filesDir(false); auto cache_path = Aurora::Application::cacheDir(false); data_path.mkpath("tracer"); if (data_path.cd("./tracer")) { auto data_path_ba = data_path.absolutePath().toUtf8(); auto cache_path_ba = cache_path.absolutePath().toUtf8(); // опционально tracer_enable_logging_to_console(); // передвигаем креш с прошлого запуска tracer_aurora_collect_minidump_from_cachedir(cache_path_ba.constData(), data_path_ba.constData()); // инициализируемся tracer_init("$$TRACER_APP_TOKEN$$", data_path_ba.constData()); // можно добавить пары кл юч-значение tracer_set_key("key", "value"); tracer_set_key(u8"ключ", u8"значение"); // ...или логи tracer_log("log event"); tracer_log(u8"логгируемое событие"); // сообщаем версию приложения tracer_set_platform_info2("sample_version", 1); // загружаем собранные с прошлого запуска/ов креши с логами tracer_upload_crashes(); }