Hexagon GDB Debugger介绍(22)

Hexagon GDB Debugger介绍(22)

2.12.7 打印设置(续)

set print pretty on
以每行一个成员的缩进格式打印结构,如下所示:

$1 = {
    next = 0x0,
    flags = {
        sweet = 1,
        sour = 1
    },
    meat = 0x54 "Pork"
}

set print pretty off
以紧凑的格式打印结构,如下所示:

$1 = {next = 0x0, flags = {sweet = 1, sour = 1}, \
meat = 0x54 "Pork"}

这是默认格式。

show print pretty
显示调试器用于打印结构的格式。

set print sevenbit-strings on
仅使用七位字符打印; 如果设置了此选项,调试器将使用符号 \nnn 显示任何八位字符(在字符串或字符值中)。 如果你使用英语 (ASCII) 工作并且你使用字符的高位作为标记或“元”位,则此设置是最好的。

set print sevenbit-strings off
打印完整的八位字符。 这允许使用更多国际字符集,并且是默认设置。

show print sevenbit-strings
显示调试器是否只打印七位字符。

set print union on
打印包含在结构中的联合。 这是默认设置。

set print union off
不要打印包含在结构中的联合。

show print union
显示结构中包含的印刷工会的当前状态。 例如,考虑以下声明:

typedef enum {Tree, Bug} Species;
typedef enum {Big_tree, Acorn, Seedling} Tree_forms;

typedef enum {Caterpillar, Cocoon, Butterfly}

Bug_forms;
struct thing {
  Species it;

  union {
Tree_forms tree;
Bug_forms bug;

  } form;
};
struct thing foo = {Tree, {Acorn}};
With set print union on in effect, p foo would print:
    $1 = {it = Tree, form = {tree = Acorn, bug = Cocoon}}
But with set print union off in effect, it would print:
    $1 = {it = Tree, form = {...}}

调试 C++ 程序时,以下设置很重要:

set print demangle
set print demangle on

以源代码形式打印 C 名称,而不是以传递给汇编器和链接器以进行类型安全链接的编码(“mangled”)形式。 默认为开启。

show print demangle
显示 C 名称是以损坏的还是损坏的形式打印的。

set print asm-demangle
set print asm-demangle on

即使在汇编代码打印输出(例如指令反汇编)中,也要以其源代码形式而不是经过修改的形式打印 C 名称。 默认为关闭。

show print asm-demangle
显示程序集列表中的 C 名称是以重整还是重整的形式打印的。

set demangle-style styl
在不同编译器用来表示 C++ 名称的多种编码方案中进行选择。 样式的选择目前是:

  • auto 允许调试器通过检查你的程序来选择解码风格。
  • gnu 基于 GNU C++ 编译器 (g++) 编码算法解码。 这是默认设置。
  • hp 基于 HP ANSI C++ (aCC) 编码算法进行解码。
  • lucid 基于 Lucid C++ 编译器 (lcc) 编码算法进行解码。
  • arm 使用 C++ 注释参考手册中的算法进行解码。
注意
    仅此设置不足以允许调试 cfront 生成的可执行文件。  为此,调试器需要进一步增强。

如果省略样式,你将看到可能的格式列表。

show demangle-style
显示当前用于解码 C++ 符号的编码样式。

set print object
set print object on

显示指向对象的指针时,使用虚函数表标识对象的实际(派生)类型而不是声明的类型。

set print object off
只显示声明类型的对象,不参考虚函数表。 这是默认设置。

show print object
显示是否显示实际的或声明的对象类型。

set print static-members
set print static-members on

显示 C++ 对象时打印静态成员。 默认为开启。

set print static-members off
显示 C++ 对象时不要打印静态成员。

show print static-members
显示是否打印 C++ 静态成员。

set print vtbl
set print vtbl on

漂亮的打印 C++ 虚拟函数表。 默认为关闭。

set print vtbl off
不要漂亮地打印 C++ 虚拟函数表。

show print vtbl
显示 C++ 虚拟函数表是否打印得很漂亮。

2.12.8 值历史记录

打印命令打印的值保存在调试器的值历史记录中。 这允许你在其他表达式中引用它们。 值被保留直到符号表被重新读取或丢弃(例如使用文件或符号文件命令)。 当符号表更改时,值历史将被丢弃,因为值可能包含指向符号表中定义的类型的指针。

打印的值被赋予历史编号,你可以通过这些编号来参考它们。 这些是从值 1 开始的连续整数。 print 通过在值之前打印 $num = 来显示分配给值的历史编号; 这里 num 是历史编号。

要引用任何以前的值,请使用 $ 后跟该值的历史编号。 其输出的打印标签方式旨在提醒你这一点。 只是 $ 指的是历史中最近的值,而 $$ 指的是之前的值。 $$n 指的是从末尾开始的第 n 个值; $$2 是 $$ 之前的值,$$1 相当于 $ , , $0 相当于 $。

例如,假设你刚刚打印了一个指向结构的指针并想查看该结构的内容。 只需键入:

p *$

如果你有一个结构链,其中下一个组件指向下一个组件,你可以使用以下命令打印下一个组件的内容:

p *$.next

你可以通过重复此命令来打印链中的连续链接; 你只需键入 即可完成。

请注意,历史记录记录的是值,而不是表达式。 如果 x 的值为 4 并且你键入以下命令:

print x
set x=5

… 那么即使 x 的值已更改,打印命令在值历史记录中记录的值仍为 4。

show values
显示值历史中的最后十个值及其项目编号(即,p $$9 重复十次,但显示值不会更改历史记录)。

show values n
显示以历史项目编号 n 为中心的十个历史值。

show values +
在最后打印的值之后显示十个历史值。 如果没有更多可用值,则显示值 + 不产生任何显示。

按 重复显示值 n 与显示值 + 的效果完全相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值