adb 调试程序参考信息
adb 调试程序使用地址、表达式、运算符、子命令以及变量组织并操作数据。
adb 调试程序地址
与写地址相关的文件中的地址是由与此文件相关的映射决定的。 每个映射都是由两个三重(B1、E1 和 F1)以及(B2、E2 和 F2)表示的。 对应于写 Address 参数的 FileAddress 参数的计算方法如下:
B1<=Address<E1=>FileAddress= 地址 + F1-B1
或
B2<=Address<E2=>FileAddress= 地址 + F2-B2
如果所需 Address 参数既不在 B1 和 E1 之间也不在 B2 和 E2 之间,那么 Address 参数无效。 在某些情况下,如带有分离的 I 和 D 空间的程序,文件的两个段落可能重叠。 如果是 ? (问号) 或 / (斜杠) 子命令后跟 * (星号) ,仅使用第二个三元组。
这两个映射的初始设置均适用于一般的 a.out 和 core 文件。 如果任一文件不是期望的类型,那么该文件的 B1 参数将设置为值 0 , E1 参数将设置为最大文件大小, F1 参数将设置为值 0。 这样,可以在不进行地址转换的情况下检查整个文件。
adb 调试程序表达式
adb 调试程序支持以下表达式:
- . (期间)
- 指定用于子命令的最近地址。 最近地址也称为当前地址。
- +(加号)
- 增加值。 (句点) 按当前增量。
- ^ (插入记号)
- 减小值。 (句点) 按当前增量。
- "(双引号)
- 指定命令输入的最近地址。
- 整数
- 如果此参数以 0o 开头,那么指定一个八进制数字;如果此参数以 0x 或 # 开头,那么指定一个十六进制数字;如果此参数以 0t 开头,那么指定一个十进制数字。 否则,此表达式指定在当前基数中解释了的数字。 初始时,此基数为 16。
- ` Cccc '
- 指定多达 4 个字符的 ASCII 值。 可使用 \(反斜杠)转义 '(撇号)。
- < Name
- 读取 Name 参数的当前值。 Name 参数为变量名或寄存器名称。 adb 命令维护以单个字母或数字命名的多个变量。 如果 Name 参数为寄存器名称,那么从 CoreFile 参数中的系统标题获取寄存器值。 使用 $r 子命令查看有效寄存器名称。
- 符号
- 指定一列大写或小写字符、下划线或数字(尽管此列不能以数字开头)。 Symbol 参数的值是从 ObjectFile 参数中的符号表获取的。 如果需要,将 initial _(下划线)作为 Symbol 参数的前缀。
- . 文号
- 指定由 Symbol 参数命名的函数的入口点。
- Routine.Name
- 指定位于指定 C 语言例程中 Name 参数的地址。 Routine 参数和 Name 参数均属于 Symbol 参数。 如果省略了 Name 参数,那么该值即为对应于 Routine 参数的最新激活的 C 堆栈帧的地址。
- (Expression)
- 指定表达式的值。
adb 调试程序运算符
可将整数、符号、变量以及寄存器名称与以下运算符组合在一起:
一元运算符
- * 表达式
- 返回由 CoreFile 参数中的 Expression 参数寻址的位置的内容。
- @ 表达式
- 返回由 Expression 参数中的 Expression 参数寻址的位置的内容。
- - 表达式
- 执行整数取负。
- ~ 表达式
- 执行按位取补。
- # 表达式
- 执行逻辑非。
二目运算符
- 表达式 1+表达式 2
- 执行整数加法。
- 表达式 1-表达式 2
- 执行整数减法。
- 表达式 1*表达式 2
- 执行整数乘法。
- 表达式 1%表达式 2
- 执行整数除法。
- 表达式 1和表达式 2
- 执行按位结合。
- 表达式 1|表达式 2
- 执行按位分隔。
- 表达式 1#表达式 2
- 将 Expression1 参数向上舍入到 Expression2 参数的下一个倍数。
二目运算符采用左关联律,且与一元运算符相比绑定较少。
adb 调试程序子命令
您可以使用 ? 显示文本或数据段的内容 (问号) 或 / (斜杠) 子命令。 =(等号)子命令以给定格式显示给定地址。 ? / 子命令可以后跟 * (星号)。
- ?格式
- 显示开始自 Address 参数的 ObjectFile 参数的内容。 . 的值 (句点) 按每个格式字母的增量总和递增。
- /格式
- 显示开始自 Address 参数的 CoreFile 参数的内容。 . 的值 (句点) 按每个格式字母的增量总和递增。
- =格式
- 显示 Address 参数的值。 i 和 s 格式字母对于此命令无意义。
Format 参数由指定显示样式的一个或多个字符组成。 每个格式字符可能以一个十进制整数开头,而该十进制整数为格式字符的重复计数。 单步执行格式时, . (句点) 按每个格式字母给出的金额递增。 如果未指定格式,那么使用上次的格式。
可用格式字母如下:
- a
- 打印 的值。 (句点) 符号形式。 检查符号以确保这些符号的类型正确。
- b
- 显示当前基数中的无符号寻址字节。
- c
- 显示寻址字符。
- C
- 显示使用以下转义约定的寻址字符:
- 将控制字符显示为后跟对应显示字符的 ~(波浪号)。
- 将不可打印字符打印为 ~ (波浪号) <数字>,其中 数字 指定字符的十六进制值。 将 ~ 字符显示为 ~ ~(波浪号波浪号)。
- d
- 以十进制显示。
- D
- 显示长整型十进制数。
- f
- 将 32 位值显示为浮点数。
- F
- 显示双精度浮点数。
- i 数字
- 作为指令显示。 Number 为指令占据的字节数。
- n
- 显示新行。
- o
- 以八进制显示两个字节。
- O
- 以八进制显示四个字节。
- p
- 使用与 a 格式字母相同的符号查找规则以符号格式显示寻址值。
- q
- 显示当前基数中无符号的两个字节。
- Q
- 显示当前基数中无符号的四个字节。
- r
- 显示空格。
- s 编号
- 显示寻址字符,直至达到字符 0。
- S 数字
- 显示使用 ~(波浪号)转义约定的字符串。 Number 变量指定包含其 0 终结符的字符串的长度。
- t
- 当以整数开头时,跳到下一个适当的制表符停止位。 例如:8t 格式命令移动到下一个 8 个空格的制表符停止位。
- u
- 显示为无符号的十进制数字。
- U
- 显示长整型无符号十进制数。
- x
- 以十六进制显示两个字节。
- X
- 以十六进制显示四个字节。
- Y
- 以日期格式显示四个字节。
- /
- 本地或全局数据符号。
- ?
- 本地或全局文本符号。
- =
- 本地或全局绝对符号。
- "..."
- 显示括起的字符串。
- ^
- 减少 。 (句点) 按当前增量。 未显示任何内容。
- +
- 增大 。 (句点) ,值为 1。 未显示任何内容。
- -
- 减少 。 (句点) 递减值 1。 未显示任何内容。
- 新行
- 重复先前的按 1 计数递增的命令。
- [?/] l值掩码
- 以 开头的词。 (句点) 使用 Mask 值进行屏蔽,并与 Value 参数进行比较,直到找到匹配项为止。 如果使用了 L,那么一次要匹配 4 个字节而不是 2 个字节。 如果找不到匹配项,那么 。 (句点) 不变; 否则, 。 (句点) 设置为匹配的位置。 如果省略了 Mask 参数,那么使用的值为 -1。
- [?/] w值...
- 将 2 字节 Value 参数写到寻址到的位置。 如果命令为 W,那么写 4 个字节。 如果命令为 V,那么写 1 个字节。 使用 w 或 W 命令时,可应用对齐限制。
- [,Count] [?/] m B1 E1 F1[?/]
- 记录 B1、E1 和 F1 参数的新值。 如果给定的表达式少于 3 个,那么不更改剩余的映射参数。 如果 ? (问号) 或 / (斜杠) 后跟 * (星号) ,第二段 (B2, E2, 映射的 F2) 已更改。 如果列表由 ? 终止 或 "/,文件(分别为ObjectFile或 "核心文件")将用于后续请求。 (例如, /m? 命令会使/指向ObjectFile) 文件。 如果指定了 Count 参数,那么 adb 命令仅更改与该文件或库相关的映射。 $m 命令显示对应于特殊文件的计数。 如果未指定 Count 参数,那么使用缺省值 0。
- >名称
- 分配 a。 (句点) 到由 Name 参数指定的变量或寄存器。
- !
- 调用 shell 以读取 ! 之后的行 开头。
- $ 修饰符
- 其他命令。 Modifier 的可用值为:
- <文件
- 从指定文件读取命令,并返回到标准输入。 如果指定计数为 0,那么将忽略此命令。 在执行 File 参数中的第一个命令之前,计数的值放在 adb 9 变量中。
- <<文件
- 从指定文件读取命令,并返回到标准输入。 可以在文件中使用 <<文件 命令,而不会导致文件关闭。 如果指定计数为 0,那么忽略此命令。 在执行 File 中的第一个命令之前,计数的值放在 adb 9 变量中。 阿德布 9 变量在 <<文件 命令执行期间保存,并在 <<文件 完成时恢复。 可同时打开的 <<文件 命令的数量存在限制。
- >文件
- 将输出发送到指定文件。 如果省略了 File 参数,那么输出返回到标准输出。 如果不存在 File 参数,那么创建它。
- 博
- 显示所有断点以及它们的相关计数和命令。
- c
- 堆栈反向跟踪。 如果给出了 Address 参数,那么将它作为当前帧的地址使用(而不是使用帧指针寄存器)。 如果使用了格式字母 C,那么为每个活动功能显示所有自动和静态变量的名称和值。 如果给出了 Count 参数,那么仅显示 Count 参数指定的帧数。
- 天
- 将当前基数设为 Address 值,或者如果未指定地址,那么将该基数值设为 16。
- e
- 显示外部变量的名称和值。 如果指定了计数,那么仅显示与该文件相关的外部变量。
- f
- 以十六进制显示浮点寄存器。
- i 指令集
- 选择用于反汇编的指令集。
- i
- 按 -I 标记的指定将缺省目录更改为 Name 参数值。
- m
- 显示地址映射。
- n mnem_set
- 选择用于反汇编的助记符。
- o
- 将当前基数值设置为 8。
- q
- 退出 adb 命令。
- R
- 打印常规寄存器和由 iar 寻址的指令,并设置 。 (句点) 到 iar。 Number$r 参数显示 Number 变量指定的寄存器。 Number,Count$r 参数显示寄存器 Number+Count-1,...,Number。
- 请
- 将符号匹配的限制设为 Address 值。 缺省值为 225。
- v
- 以八进制显示所有非零变量。
- w
- 设置 Address 参数的输出页面宽度。 缺省值为 80。
- P 名称
- 将 Name 值作为提示字符串使用。
- ?
- 显示进程标识、导致中断或终止的信号以及 $r 的寄存器。
- : 修饰符
- 管理子进程。 可用修饰符为:
- b命令
- 在 Address 参数处设置断点。 在导致停止之前,断点运行 Count 参数 -1 次。 每次遇到该断点时,运行指定命令。 如果此命令设置 。 (句点) 到值 0 ,断点将导致停止。
- c信号
- 继续带有指定信号的子进程。 如果给出了 Address 参数,那么在此地址继续子进程。 如果未指定信号,那么发送导致该子进程停止的信号。 跳过的断点与 r 修饰符的断点相同。
- 天
- 在 Address 参数处删除断点。
- k
- 如果当前子进程正在运行,那么停止它。
- R
- 将 ObjectFile 参数作为子进程运行。 如果明确给出了 Address 参数,那么在此点输入程序。 否则,在其标准入口点输入程序。 Count 参数指定在停止前将要忽略的断点数目。 可在同一行将子进程的参数作为命令提供。 以 < 或 > 开头的自变量为命令建立标准输入或输出。 在子进程的入口处,所有信号均被打开。
- s信号
- 继续单步执行子进程,直至达到 Count 参数中指定的数目。 如果当前没有子进程,那么将 ObjectFile 参数作为子进程运行。 在此情况下,任何信号均无法被发送。 将行的剩余部分作为子进程的参数对待。
adb 调试程序变量
adb 命令提供了大量变量。 启动 adb 程序时,从指定核心文件中的系统标题设置以下变量。 如果 CoreFile 参数不显示为 core 文件,那么从 ObjectFile 参数设置这些值:
- 0
- 上一次显示的值
- 1
- 指令源的上一个位移部分
- 2
- 1 变量的先前值
- 9
- 最后一个 $< 或 $<< 子命令的计数
- b
- 数据段的基地址
- d
- 数据段的大小
- e
- 程序的入口地址
- m
- 魔数
- s
- 堆栈段的大小
- t
- 文本段的大小