сборка - lldb не может найти правильную отладочную информацию в macOS - PullRequest
0 голосов
/ 23 февраля 2019

Я изучаю ассемблер на macOS 10.14, и версия моего ассемблера nasm - 2.14.02, версия компоновщика ld - ld64-409.12, версия отладчика lldb - lldb-1000.11.38.2.

У меня естьФайл исходного кода с именем test.asm, и я использую

nasm -f macho64 -F dwarf -g test.asm
ld -e _start -o test test.o -lSystem

И я использую lldb для отладки:

lldb test

Когда я хочу установить точки останова в определенной строке, например:

(lldb)b test.asm:3

Оказывается, что:

error: parsing line table prologue at 0x00000000 (parsing ended around 0x00000006
Breakpoint 1: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.

Я использую

nm -pa test

для проверки отладочной информации, и получается:

0000000000000000 - 00 0000    SO xxxx(the directory)
0000000000000000 - 00 0000    SO test.asm
000000005c70cdfd - 03 0001   OSO xxxx/test.o
0000000000001f88 - 01 0000 BNSYM
0000000000001f88 - 01 0000   FUN _start
0000000000000078 - 00 0000   FUN
0000000000000078 - 01 0000 ENSYM
0000000000002000 - 02 0000 STSYM query_string
0000000000002014 - 02 0000 STSYM out_string
0000000000002025 - 03 0000 STSYM in_char
0000000000000000 - 01 0000    SO
0000000000002000 d query_string
0000000000002014 d out_string
0000000000000011 a out_string_len
0000000000000014 a query_string_len
0000000000002025 b in_char
0000000000001000 T __mh_execute_header
0000000000001f88 T _start
                 U dyld_stub_binder

И если я использую

dsymutil -dump-debug-map test

Получается

---
triple:          'x86_64-apple-darwin'
binary-path:     test
objects:
  - filename:        xxxx/test.o
    timestamp:       1550896637
    symbols:
      - { sym: in_char, objAddr: 0x000000000000009D, binAddr: 0x0000000000002025, size: 0x00000000 }
      - { sym: query_string, objAddr: 0x0000000000000078, binAddr: 0x0000000000002000, size: 0x00000000 }
      - { sym: _start, objAddr: 0x0000000000000000, binAddr: 0x0000000000001F88, size: 0x00000078 }
      - { sym: out_string, objAddr: 0x000000000000008C, binAddr: 0x0000000000002014, size: 0x00000000 }
...

Если я использую dsymutil для упаковки отладочной информации, например:

dsymutil test

И попробуйтеlldb test опять получается:

warning: (x86_64) xxxx/test empty dSYM file detected, dSYM was created with an executable with no debug info.

1 Ответ

0 голосов
/ 23 июня 2019

Наконец-то я разобрался.LLDB поддерживает программу, собранную GAS, с исходным кодом с использованием синтаксиса AT & T.И если вы действительно хотите отлаживать программу, собранную NASM, с исходным кодом, используя синтаксис intel на macOS, просто используйте GDB.

...