Hexagon GDB Debugger介绍(7)

240 篇文章 11 订阅

Hexagon GDB Debugger介绍(7)

2.8.2 运行程序

run [argument…]
r [argument…]
在调试器中执行您的程序。 必须首先使用文件(第 2.18.1 节)或 exec-file 命令(第 3.2.1 节)加载程序。

在支持进程的目标平台中, run 创建一个子进程并使该进程运行您的程序。 在没有进程的平台上,运行会跳转到程序的开头。

程序的执行受到它从调试器接收到的某些信息的影响。 在启动程序之前,您必须在调试器中设置此信息。
(您可以在启动程序后更改它,但此类更改只会在您下次启动程序时影响您的程序。)这些信息可以分为以下几类:

  • 参数
  • 环境
  • 工作目录
  • 标准输入输出

参数
程序参数可以指定为运行命令的参数。 不指定参数会导致 run 使用在先前运行调用中指定的程序参数,或由 set args 命令(第 2.8.3 节)设置的参数。

环境
您的程序通常从调试器继承其环境,但您可以使用命令 set environment 和 unset environment 来更改影响程序的部分环境(第 2.8.4 节)。

工作目录
您的程序从调试器继承其工作目录。 您可以在调试器中使用 cd 命令来设置工作目录(第 2.8.5 节)。

标准输入输出
您的程序通常使用与调试器相同的设备进行标准输入和标准输出。 您可以在运行命令行中重定向输入和输出,或者您可以使用 tty 命令为您的程序设置不同的设备(第 2.8.6 节)。

注意:
当输入和输出重定向工作时,您不能使用管道将正在调试的程序的输出传递给另一个程序; 如果您尝试这样做,您可能最终会调试错误的程序。

当您发出运行命令时,您的程序将立即开始执行。 有关如何安排程序停止的讨论,请参见第 2.9 节。 一旦您的程序停止,您就可以使用打印或调用命令(第 2.12 节)调用程序中的函数。

如果您的符号文件的修改时间自上次调试器读取其符号以来发生了变化,调试器将丢弃其符号表并再次读取它。 当它这样做时,它会尝试保留您当前的断点。

2.8.3 程序参数

可以通过两种方式指定程序参数:

  • 作为运行命令的参数(第 2.8.2 节)
  • 使用 set args 命令

set args
指定下次运行程序时要使用的参数。
如果 set args 不指定任何参数,则 run 不带程序参数执行您的程序。 一旦你运行了一个带参数的程序,在下一次运行之前使用 set args 是不带参数重新运行它的唯一方法。

show args
显示当前设置的参数。

如果目标环境支持 shell,则使用 shell 传递任何程序参数,使您能够使用 shell 功能(例如通配符和变量)来指定参数。 shell 处理参数并执行 I/O 重定向,然后将处理后的参数传递给您的程序。

注意:
在 UNIX 平台上,您可以通过设置 SHELL 环境变量来控制使用哪个 shell。 如果未定义 SHELL,则使用默认 shell(UNIX 上的 /bin/sh)。

如果目标环境不支持 shell,您的程序通常由调试器直接调用,调试器通过适当的系统调用模拟 I/O 重定向,并由程序的启动代码扩展通配符。

2.8.4 程序环境

环境由一组环境变量及其值组成。 环境变量通常会记录诸如您的用户名、主目录、终端类型以及要运行的程序的搜索路径等内容。 通常你用 shell 设置环境变量,这些变量会被你运行的所有其他程序继承。 调试时,尝试在修改后的环境中运行程序而不必重新启动调试器会很有用。

path directory
将目录添加到将传递给您的程序的 PATH 环境变量(可执行文件的搜索路径)的前面。 调试器使用的 PATH 值不会改变。 您可以指定多个目录名称,以空格或系统相关的分隔符分隔(在 UNIX 上为 :,在 MS-DOS 和 MS Windows 上为 ;)。 如果目录已在路径中,则将其移至最前面,以便更快地进行搜索。

在调试器搜索路径时,您可以使用字符串 $cwd 来引用当前工作目录。 如果您改用‘.’,则它指的是您执行 path 命令的目录。 调试器替换‘ . ’ 在目录参数(带有当前路径)中添加目录到搜索路径之前。

show paths
显示可执行文件的搜索路径列表(PATH 环境变量)。

show environment [varname]
显示要在程序启动时提供给程序的环境变量 varname 的值。 如果不提供 varname,则打印要提供给程序的所有环境变量的名称和值。 您可以将环境缩写为 env 。

set environment varname [=value]
将环境变量 varname 设置为 value。 该值仅针对您的程序更改,而不针对调试器本身。 值可以是任何字符串; 环境变量的值只是字符串,任何解释都由您的程序本身提供。 value 参数是可选的; 如果它被消除,则变量被设置为空值。

例如:

set env USER = foo

这会通知被调试的程序,当随后运行时,它的用户名为 foo 。 (= 周围的空格是为了清楚起见,实际上并不是必需的。)

unset environment varname
从环境中删除变量 varname 以传递给您的程序。 这不同于 set env varname =; unset environment 从环境中删除变量,而不是为其分配一个空值。

注意:
在 UNIX 系统上,调试器使用 SHELL 环境变量(如果存在)或 /bin/sh(如果不存在)指示的 shell 运行您的程序。 如果您的 SHELL 变量命名运行初始化文件的 shell,例如 C-shell 的 .cshrc 或 BASH 的 .bashrc,您在该文件中设置的任何变量都会影响您的程序。 您可能希望将环境变量的设置移动到仅在您登录时运行的文件中,例如 .login 或 .profile 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值