初识 LLDB

越看大别的书愈发觉得自己基础的薄弱,刚对汇编有了一个初步认识,接下来又要用 lldb 来看寄存器数据,这让我如何是好,只好再次放下书,继续 Google ……

同样,本文只为我在简单了解 lldb 时的笔记,定有纰漏还请见谅。

什么是 LLDB

The LLDB Debugger (LLDB) is a software debugger. It is built as a set of reusable components which extensively use existing libraries from the larger LLVM Project, such as the Clang expression parser and LLVM disassembler. — quote from Wikipedia

LLDB 调试器是一款软件调试器。它是作为一组可重用组件构建的,它广泛使用来自较大 LLVM 项目的现有库,如 Clang 表达式解析器和 LLVM 反汇编器。

如何使用 LLDB 来调试

这里以经典的 hello.c 程序来演示:

源码如图所示

首先我们用 gcc 来编译出可执行文件,gcc hello.c -o hello

准备工作都做好了,接下来就可以进行调试工作了。

在命令行中输入 lldb ./hello 即可进入调试模式:

到了这一步,可能你不知所措了,这个时候可以键入 help 来查看 lldb 所支持的所有指令。

由于 lldb 有非常多的命令,这里就不一一截图了,只展示一小部分。不过还是要把常用的一些指令拿出来说一下:

list / l 查看代码

Tips: 不输入指令直接回车,会执行上一次执行的指令。

你或许会发现 list 之后再回车或者执行 list 将没有内容输出,这是因为已经 list 到文末,没有内容可以输出了,这个时候键入 list 1 / l 1 就回到第一行来。

此外,list n (n 表示自然数)表示从指定行向下输入 10 行。如果你的项目由多个文件构成,还可以 list filename 查看指定文件的代码。list function_name 查看具体函数。

breakpoint / br 断点

我们知道想要调试程序则必须要有断点,lldb 也一样,通过 breakpoint / br 可以设置断点。

可以根据函数名下断点,如图所示(br set -n main # C 函数);

还可以根据:

文件名 + 行号:br set –file filename –line line_number

C++ 类方法:br set –method func

Objective-C 选择器:br set –selector func

等等。

br list 查看断点列表

br disable breakpoint_number (breakpoint_number 为 list 所示标号) 禁用指定断点

br enable breakpoint_number (breakpoint_number 为 list 所示标号) 启用指定断点

br delete breakpoint_number (breakpoint_number 为 list 所示标号) 删除指定断点

OK,断点加好了,这个时候就需要启动了,很简单,键入 r 即可运行。

run / r 运行

next / n , step over 下一步

step / s, step into 步入

finish. step out 步出

continue / c, goto next breakpoint 继续执行到下一个断点

print / p, 打印出变量

call, 调用

backtrace / bt, 打印出当前堆栈

register read, 读取寄存器信息

disassemble –pc, 打印出寄存器指向的信息

感谢您的阅读,本文由 三十七度一 版权所有。如若转载,请注明出处:三十七度一(https://ultrarex.com/p/689e.html
初识汇编
我喜爱这个世界什么?