Итак, мы пытаемся использовать backward-cpp для печати стековых трасс в нашем приложении c ++. В частности, мы используем обработчик сигнала для перехвата ошибок и их печати. Примечание : Использование llibdw для подробных стеков
Прекрасно работает на x86_64, но не может напечатать полную трассировку стека на arm64 nvidia-jetson-nano.
Запуск примера bracktrace_test на x86_64:
$ g++ --version
g++ (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ uname --operating-system --kernel-name --kernel-release --hardware-platform --processor
Linux 4.15.0-65-generic x86_64 x86_64 GNU/Linux
$ g++ -g -rdynamic backward.hpp backtrace_test.cpp -o backtrace_test -ldw
$ ./backtrace_test
Запуск такого же примера bracktrace_test на nano arm64:
$ g++ --version
g++ (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ uname --operating-system --kernel-name --kernel-release --hardware-platform --processor
Linux 4.9.140-tegra aarch64 aarch64 GNU/Linux
$ g++ -g -rdynamic -funwind-tables -fasynchronous-unwind-tables backward.hpp backtrace_test.cpp -o backtrace_test -ldw
$ ./backtrace_test
Код для теста обратной трассировки:
#define BACKWARD_HAS_DW 1
#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdexcept>
#include "backward.hpp"
backward::SignalHandling sh;
void myfunc(int ncalls)
{
throw std::invalid_argument( "sample invalid exception");
}
int main(int argc, char *argv[])
{
myfunc();
exit(EXIT_SUCCESS);
}
Отслеживание проблемы: проблема