Как перевести трассировку/адрес стека на Mac, чтобы можно было использовать addr2line?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как перевести трассировку/адрес стека на Mac, чтобы можно было использовать addr2line?

Сообщение Anonymous »

Я пытаюсь сохранить трассировку стека в форме, которую позже можно будет декодировать с помощью addr2line. Я получаю трассировку стека через обратную трассировку, но не знаю, как преобразовать ее в независимый от позиции адрес.
Решения, которые я пробовал:
  • Я попробовал передать это в backtrace_symbols, как предлагают многие руководства. Затем я получаю строку типа «0 MyExecutable 0x00000001004a2ba1 _Z13EventLoop_addPPvP7Event_s + 97». Когда я пытаюсь передать адрес оттуда «0x00000001004a2ba1» в addr2line addr2line -e MyExecutable 0x00000001004a2ba1, он не может вернуть информацию о функции + строке.
  • Используя тот же адрес, что и выше с atos, передающим исполняемый файл.
  • Использование того же адреса, что и 1, с atos и передача идентификатора процесса вместо исполняемого файла.
Причина, по которой работает только 3, — это ASLR. Ответ здесь https://stackoverflow.com/a/63856113/516813 показывает, как перевести адрес в Linux, но решение не работает для Mac, потому что dladdr1 не существует, и я не могу найти способ получить link_map . Кто-нибудь знает, как это сделать для Mac?

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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