ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Hexagon GDB Debugger介绍(40)

2021-12-09 13:32:01  阅读:240  来源: 互联网

标签:set Debugger show ABI 默认 命令 GDB Hexagon 调试器


Hexagon GDB Debugger介绍(40)

3.4 控制调试器

你可以使用 set 命令更改调试器与你交互的方式。 有关控制调试器如何显示数据的命令,请参阅第 2.12.7 节。 此处描述了其他设置。

3.4.1 prompt

调试器通过打印一个名为prompt的字符串来表明它已准备好读取命令。 这个字符串通常是 (qdsp6-gdb)。 你可以使用 set prompt 命令更改提示字符串。 例如,在调试调试器本身时,更改其中一个调试器会话中的提示很有用,这样你就可以始终知道正在与哪个会话对话。

注意 
    设置提示不会在你设置的提示后为你添加空格。  这允许你设置以空格结尾的提示或不以空格结尾的提示。

set prompt newprompt
指示调试器从此以后使用 newprompt 作为其提示字符串。
show prompt
打印如下形式的一行:Gdb 的提示是:your-prompt

3.4.2 命令编辑

调试器通过 readline 接口读取其输入命令。 这个 GNU 库为向用户提供命令行界面的程序提供一致的行为。 优点是 GNU Emacs 风格或 vi 风格的命令内联编辑、类似 csh 的历史替换以及跨调试会话的命令历史的存储和调用。

你可以使用 set 命令控制调试器中命令行编辑的行为:
set editing
set editing on

启用命令行编辑(默认启用)

set editing off
禁用命令行编辑

show editing
显示是否启用命令行编辑

有关 readline 接口的更多信息,请参阅第 5.4 节(很久以后会有的)。 鼓励不熟悉 GNU Emacs 或 vi 的用户阅读该部分。

3.4.3 命令记录

调试器可以跟踪你在调试会话期间键入的命令,以便你可以准确地确定发生了什么。 使用这些命令来管理调试器命令历史工具。

调试器使用 GNU 历史库(Readline 包的一部分)来实现历史功能。 有关历史库的更多信息,请参阅第 5.5 节。

以下命令控制命令历史记录的使用:
set history filename fname
将调试器命令历史文件的名称设置为 fname。 调试器在此文件中读取初始命令历史记录列表,并在退出时从该会话写入命令历史记录。 你可以通过历史扩展或通过下面列出的历史命令编辑字符访问此列表。 此文件默认为环境变量 GDBHISTFILE 的值,如果未设置此变量,则默认为 ./.gdb_history(MS-DOS 上的 ./_gdb_history)。

set history save
set history save on

将命令历史记录在一个文件中,其名称可以通过set history filename命令指定。 默认情况下,此选项处于禁用状态。

set history save off
停止在文件中记录命令历史。

set history size size
设置调试器保留在其历史列表中的命令数。 这默认为环境变量 HISTSIZE 的值,如果未设置此变量,则默认为 256。

历史扩展赋予字符 ! 特殊含义。
自从 ! 也是 C 中的逻辑非运算符,默认情况下历史扩展是关闭的。 如果你决定使用 set history extension on命令启用历史扩展,则有时可能需要遵循! (当它在表达式中用作逻辑非时)用空格或制表符防止它被扩展。 readline 历史工具不会尝试替换字符串 != 和 !(,即使启用了历史扩展。

控制历史扩展的命令是:

set history expansion on
set history expansion

启用历史扩展。 默认情况下历史扩展是关闭的。

set history expansion off
禁用历史扩展。
readline 代码带有更完整的编辑和历史扩展功能文档。 不熟悉 GNU Emacs 或 vi 的用户可能想阅读它。

show history
show history filename
show history save
show history size
show history expansion

这些命令显示调试器历史参数的状态。 show history 本身显示所有四种状态。

show commands
显示命令历史中的最后十个命令。

show commands n
以命令编号 n 为中心打印十个命令。

show commands +
在最后一次打印命令之后打印十个命令。

3.4.4 屏幕尺寸

调试器的某些命令可能会在屏幕上产生大量信息输出。 为了帮助你阅读所有内容,调试器会暂停并在每页输出的末尾要求你输入。 当你想继续输出时输入 ,或输入 q 丢弃剩余的输出。 此外,屏幕宽度设置决定了何时换行输出。 根据打印的内容,调试器会尝试在可读的地方断行,而不是简单地让它溢出到下一行。

通常调试器通过终端驱动软件知道屏幕的大小。 例如,在 UNIX 上,调试器将 termcap 数据库与 TERM 环境变量的值以及 stty 行和 stty cols 设置一起使用。 如果这不正确,你可以使用 set height 和 set width 命令覆盖它:

set height lpp
show height
set width cpl
show width

这些set命令指定 lpp 行的屏幕高度和 cpl 字符的屏幕宽度。 相关的 show 命令显示当前设置。
如果指定零行高度,则无论输出多长时间,调试器都不会在输出期间暂停。 如果输出到文件或编辑器缓冲区,这很有用。
同样,你可以指定设置宽度 0 以防止调试器包装其输出。

3.4.5 关于数字的约定

你始终可以按照通常的约定在调试器中以八进制、十进制或十六进制输入数字:八进制数以 0 开头,十进制数以 . 结尾,十六进制数以 0x 开头。 默认情况下,不以这些开头的数字以 10 为基数输入; 同样,当未指定特定格式时,数字的默认显示为基数 10。你可以使用 set radix 命令更改输入和输出的默认基数。
set input-radix base
设置数字输入的默认基数。 支持的基数选择是十进制 8、10 或 16。基数本身必须明确指定或使用当前默认基数; 例如,任何

set radix 012
set radix 10.
set radix 0xa

将基数设置为十进制。 另一方面,设置基数 10 会使基数保持不变,无论它是什么。

set output-radix base
设置数字显示的默认基数。 支持的基数选择是十进制 8、10 或 16。基数本身必须明确指定或使用当前默认基数。

show input-radix
显示数字输入的当前默认基数。

显示输出基数
显示数字显示的当前默认基数。

3.4.6 配置当前 ABI

调试器可以自动确定应用程序的 ABI(应用程序二进制接口)。 但是,有时你需要覆盖其结论。 使用这些命令来管理当前 ABI 的调试器视图。

一个调试器配置可以通过远程调试或本地仿真来调试多个操作系统目标的二进制文件。 调试器将自动检测正在使用的 OS ABI(操作系统 ABI),但你可以使用 set osabi 命令覆盖其结论。 一个有用的示例是在调试二进制文件时使用替代 C 库(例如,用于 GNU/Linux 的 UCLIBC),该库没有与你平台的标准 C 库提供的相同标识标记。

show osabi
显示当前使用的 OS ABI。

set osabi
不带参数,显示已注册的可用 OS ABI 列表。

set osabi abi
将当前操作系统 ABI 设置为 abi。

通常,将 float 类型的参数传递给函数的方式取决于该函数是否被原型化。 对于原型(即 ANSI/ISO 样式)函数,根据浮点的体系结构约定,传递浮点参数不变。 对于非原型(即 K&R 风格)函数,浮点参数首先提升为 double 类型,然后传递。

不幸的是,某些形式的调试信息不​​能可靠地指示函数是否已原型化。 如果调试器调用一个没有被标记为原型的函数,它会参考 set coerce-float-to-double

set coerce-float-to-double
set coerce-float-to-double on

当传递给非原型函数时,float 类型的参数将被提升为 double。 这是默认设置。

set coerce-float-to-double off
float 类型的参数将直接传递给非原型函数。

调试器需要知道用于程序的 C++ 对象的 ABI。 正确的 C++ ABI 取决于用于构建应用程序的 C++ 编译器。 调试器仅完全支持具有单个 C++ ABI 的程序; 如果你的程序包含使用多个 C++ ABI 的代码,或者如果调试器无法正确识别你程序的 ABI,你可以告诉调试器使用哪个 ABI。 当前支持的 ABI 包括“gnu-v2”(用于 3.0 之前的 g++ 版本)、“gnu-v3”(用于 g++ 3.0 及更高版本)以及“hpaCC”(用于 HP ANSI C++ 编译器)。 其他 C++ 编译器也可能使用“gnu-v2”或“gnu-v3”ABI。 默认设置为“自动”。

show cp-abi
显示当前使用的 C++ ABI。

set cp-abi
不带参数,显示受支持的 C++ ABI 列表。

set cp-abi abi
set cp-abi auto

将当前C++ ABI设置为abi,或者返回自动检测。

3.4.7 可选的警告和消息

默认情况下,调试器对其内部工作保持沉默。 如果你在慢速机器上运行,你可能需要使用 set verbose 命令。 这使得调试器在执行冗长的内部操作时会告诉你,因此你不会认为它已经崩溃。
目前,由 set verbose 控制的消息是那些宣布正在读取源文件的符号表的消息; 请参阅第 2.18.1 节中的符号文件。

set verbose on
启用某些信息性消息的调试器输出。

set verbose off
禁用某些信息性消息的调试器输出。

show verbose
显示 set verbose 是打开还是关闭。

默认情况下,如果调试器在目标文件的符号表中遇到错误,则它是静默的; 但是如果你正在调试编译器,你可能会发现此信息很有用(请参阅第 2.18.3 节)。

set complaints limit
允许调试器在对问题保持沉默之前输出关于每种类型的异常符号的限制抱怨。 将限制设置为 0 以抑制所有投诉; 将其设置为较大的数字以防止投诉被压制。

show complaints
显示允许调试器产生多少符号投诉。

默认情况下,调试器是谨慎的,并且会询问有时似乎是很多愚蠢的问题来确认某些命令。 例如,如果你尝试运行一个已经在运行的程序:

(qdsp6-gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n)

如果你愿意毫不畏惧地面对自己命令的后果,则可以禁用此“功能”:
set confirm off
禁用确认请求。

set confirm on
启用确认请求(默认)。

show confirm
显示确认请求的状态。

3.4.8 关于内部事件的可选消息

set debug arch
打开或关闭 gdbarch 调试信息的显示。 默认是关闭的。
show debug arch
显示当前显示 gdbarch 调试信息的状态。
set debug event
打开或关闭调试器事件调试信息的显示。 默认为关闭。
show debug event
显示显示调试器事件调试信息的当前状态。
set debug expression
打开或关闭调试器表达式调试信息的显示。 默认为关闭。
show debug expression
显示显示调试器表达式调试信息的当前状态。
set debug frame
打开或关闭调试器帧调试信息的显示。 默认为关闭。
show debug frame
显示显示调试器帧调试信息的当前状态。
set debug overload
打开或关闭调试器 C++ 重载调试信息的显示。 这包括功能排名等信息。默认为关闭。
show debug overload
显示显示调试器 C++ 重载调试信息的当前状态。
set debug remote
打开或关闭有关通过串行线路来回发送到远程机器的所有数据包的报告的显示。 该信息打印在调试器标准输出流上。 默认为关闭。
show debug remote
显示远程报文的显示状态。
set debug serial
打开或关闭调试器串行调试信息的显示。 默认为关闭。
show debug serial
显示显示调试器串行调试信息的当前状态。
set debug target
打开或关闭调试器目标调试信息的显示。 此信息包括调试器目标级别上发生的事情。 默认为关闭。
show debug target
显示显示调试器目标调试信息的当前状态。
set debug varobj
打开或关闭调试器变量对象调试信息的显示。 默认为关闭。
show debug varobj
显示显示调试器变量对象调试信息的当前状态。

标签:set,Debugger,show,ABI,默认,命令,GDB,Hexagon,调试器
来源: https://blog.csdn.net/weixin_38498942/article/details/121806949

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有