Это сложный вопрос, поскольку он зависит от версии Boost и платформы.
Я использую boost stacktrace , чтобы напечатать backtrace, где некоторые утверждения не выполняются.Существуют некоторые внешние задержки времени компиляции и выполнения, в зависимости от того, какой режим вы используете (ссылка документы ~ 5 режимов).Я бы предпочел что-то, основанное как на отладочной информации, так и на информации об экспорте (последняя из которых, как я предполагаю, будет работать и в производственных сборках).Но я не могу заставить работать ни режим по умолчанию, ни BOOST_STACKTRACE_USE_ADDR2LINE
, ни BOOST_STACKTRACE_USE_BACKTRACE
- все 3 показывают только адреса в стеке вызовов для моего действительного программного кода - см. Ниже трассировку стека из теста google-test:
0# 0x000055E47D43BDC2 in Debug/myprog
1# 0x000055E47D489055 in Debug/myprog
2# 0x000055E47D567FDF in Debug/myprog
3# 0x000055E47D560CDE in Debug/myprog
4# void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) in /usr/lib/libgtest.so.1.8.1
5# testing::Test::Run() in /usr/lib/libgtest.so.1.8.1
6# testing::TestInfo::Run() in /usr/lib/libgtest.so.1.8.1
7# testing::TestCase::Run() in /usr/lib/libgtest.so.1.8.1
8# testing::internal::UnitTestImpl::RunAllTests() in /usr/lib/libgtest.so.1.8.1
Что я пробовал: -rdynamic, -fno-pie и -fPIC, (я уже на -O0), -ggdb3 вместо значения по умолчанию -g3, Ничего делает имена функций такими, чтобыпоказать вверх.
Похожие: это , это .
Я нахожусь: gcc 8.2, boost 1.69 (режим только заголовка дляstracktrace lib), Arch Linux (в этой системе мне пришлось бы вручную устанавливать libbacktrace, который не упакован, поэтому я бы предпочел использовать подход ADDR2LINE)
Edit: обновленная ссылка на последнюю версию.stacktrace.
Edit2: я заметил, что документ boost.stacktrace содержит эту подсказку
Имена функций из общих библиотек могут не декодироваться из-за рандомизации расположения адресного пространства.Все же лучше, чем ничего.
... звучит полезно, но для меня все наоборот, я не получаю символы в своем собственном исполняемом файле, но я, например, для libgtest.so
.Так что как будто что-то не так с настройкой отладочной информации.Любые идеи приветствуются.