Что не так с этим кодом, который пытается напечатать обратную трассировку в LinuxC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Что не так с этим кодом, который пытается напечатать обратную трассировку в Linux

Сообщение Anonymous »

Я пытаюсь напечатать обратную трассировку после возникновения исключения в моем коде. Я получаю обратную трассировку следующим образом:

Код: Выделить всё

constexpr size_t MAX_STACK_FRAMES{ 64 };
static void* stack_traces[MAX_STACK_FRAMES];
void posix_print_stack_trace()
{
int i, trace_size = 0;
char** messages = (char**)NULL;
char buffer[1024]{};    // buffer for error message

trace_size = backtrace(stack_traces, MAX_STACK_FRAMES);
messages = backtrace_symbols(stack_traces, trace_size);

/* skip the first couple stack frames (as they are this function and
our handler) and also skip the last frame as it's (always?) junk. */
// for (i = 3; i < (trace_size - 1); ++i)
// we'll use this for now so you can see what's going on
for (i = 0; i < trace_size; ++i)
{
if (addr2line(global_program_name, stack_traces[i]) != 0)
И используйте функцию addr2line, чтобы попытаться отформатировать обратную трассировку, вызвав команду addr2line:

Код: Выделить всё

    /* have addr2line map the address to the relevant line in the code */
#ifdef __APPLE__
/* apple does things differently... */
sprintf(addr2line_cmd, "atos -o %.256s %p", program_name, addr);
#else
sprintf(addr2line_cmd, "addr2line -f -p -e %.256s %p", program_name, addr);
#endif
Проблема в том, что результат выглядит следующим образом:

Код: Выделить всё

?? ??:0
?? ??:0
?? ??:0
?? ??:0
?? ??:0
?? ??:0
?? ??:0
Я уверен, что именно так я вызываю команду addr2line. Если мне нужно изменить адрес, который я ему передаю, что мне нужно сделать, пожалуйста?

Подробнее здесь: https://stackoverflow.com/questions/791 ... e-on-linux
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Что не так с этим кодом, который пытается напечатать обратную трассировку в Linux
    Anonymous » » в форуме Linux
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Невозможно получить обратную трассировку по адресу стека pthread_attr_getstack
    Гость » » в форуме Linux
    0 Ответы
    24 Просмотры
    Последнее сообщение Гость
  • Как запретить серверу gRPC в Python регистрировать многострочную обратную трассировку
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Удалить обратную трассировку ошибок из ответа маяка laravel
    Anonymous » » в форуме Php
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Удалить обратную трассировку ошибок из ответа маяка laravel
    Anonymous » » в форуме Php
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»