LLDB不允许设置断点也不允许列出源文件



具有以下程序集源代码:

# hello_asm.s
# as hello_asm.s -o hello_asm.o
# ld hello_asm.o -e _main -o hello_asm
.section __DATA,__data
str:
.asciz "Hello world!n"
.section __TEXT,__text
.globl _main
_main:
movl $0x2000004, %eax           # preparing system call 4
movl $1, %edi                    # STDOUT file descriptor is 1
movq str@GOTPCREL(%rip), %rsi   # The value to print
movq $100, %rdx                 # the size of the value to print
syscall
#
# EXITING
#
movl $0, %ebx
movl $0x2000001, %eax           # exit 0
syscall

通过编译和链接使用以下指令:

as sum.s -g -o sum.o
ld -arch x86_64 -e main -L /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/lib -lSystem sum.o -o sum

,通过尝试在LLDB上调试它,我得到以下结果:

❯❯❯❯ lldb sum.o                                                                                                                   ~/D/test
(lldb) target create "sum.o"
Current executable set to '/Users/mbertamini/Downloads/test/sum.o' (x86_64).
(lldb) list
(lldb) b 16
error: No selected frame to use to find the default file.
error: No file supplied and no default file available.
(lldb)

这是侏儒:

❯❯❯❯ dwarfdump sum.o                                                                                                                     ~/D/t/summ
sum.o:  file format Mach-O 64-bit x86-64
.debug_info contents:
0x00000000: Compile Unit: length = 0x00000094 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x08 (next unit at 0x00000098)
0x0000000b: DW_TAG_compile_unit
DW_AT_stmt_list   (0x00000000)
DW_AT_low_pc  (0x0000000000000000)
DW_AT_high_pc (0x0000000000000026)
DW_AT_name    ("sum.s")
DW_AT_comp_dir    ("<filepath>")
DW_AT_producer    ("Apple clang version 12.0.0 (clang-1200.0.32.27)")
DW_AT_language    (DW_LANG_Mips_Assembler)
0x0000007e:   DW_TAG_label
DW_AT_name  ("main")
DW_AT_decl_file ("<filepath-file>")
DW_AT_decl_line (10)
DW_AT_low_pc    (0x0000000000000000)
DW_AT_prototyped    (0x00)
0x00000095:     DW_TAG_unspecified_parameters
0x00000096:     NULL
0x00000097:   NULL
❯❯❯❯ as -v                                                                                                                               ~/D/t/summ
Apple clang version 12.0.0 (clang-1200.0.32.27)
Target: x86_64-apple-darwin20.2.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1as -triple x86_64-apple-macosx11.0.0 -filetype obj -main-file-name - -target-cpu penryn -fdebug-compilation-dir /Users/mbertamini/Downloads/test/summ -dwarf-debug-producer "Apple clang version 12.0.0 (clang-1200.0.32.27)" -dwarf-version=4 -mrelocation-model pic -o a.out -

有什么问题吗?我该怎么办?

问题是应该使用映射调试信息的源文件(sum.s):

$ as sum.s -g -o sum.o
$ ld -arch x86_64 -e _main -macosx_version_min 10.13 -lSystem sum.o -o sum
$ lldb sum
(lldb) target create "sum"
Current executable set to 'sum' (x86_64).
(lldb) b sum.s:16
Breakpoint 1: where = sum`main + 26, address = 0x0000000100000fac
(lldb) 

在装配时,使用-g代码生成选项的-O0优化。
(这只在使用clang编译时重要;这不适用于as)

:解析断点到位置

最新更新