工具/软件:TI C/C++编译器
我们使用 ARM 编译器 :TI ARM C/C++编译器 v16.9.4.LTS
在使用 gdb 进行调试时、我们发现了两个问题:
定义符号不会添加到调试信息中。 因此、在 GDB 中无法引用定义的常量。
2.从具有浮点参数的 GDB 调用函数时,这些浮点参数被破坏。
在 GDB 中、您需要使用"设置穿透浮点到双精度0"。
ARM 编译器可能错误地指示该函数"未进行原型设计"。 请参阅下面的 GDB 源代码注释:
/*向函数传递参数的方式取决于函数是否传递参数
以 K&R 样式或原型样式定义。 如果您定义了
函数、使用获取`float'参数的 K&R 语法
`d方必须将该参数作为"双"传递。 如果您定义了
函数、则必须传递
参数为`float'、无提升。
遗憾的是、在某些较旧的平台上、调试信息不存在
可靠地指出每个函数的定义方式。 函数类型
即使定义了函数、也可以清除 Type_Typelaged 标志
进行了比较。 调用 type_typ原 型的函数时
标志是明确的、GDB 会查询此标志以决定要执行的操作。
对于现代目标、假设原型是正确的
flag 为空、可信任:`float'参数应为
`d为"双"。 对于某些较旧的目标、如果是原型
标志是明确的、这不会告诉我们任何东西。 默认为到
信任调试信息;用户可以覆盖此行为
使用"设置穿透浮点到双精度0"。 */"
通常、type 参数 float
传递给函数的方式取决于函数是否进行原型设计。 对于原型(即 ANSI/ISO 样式)函数, float
根据的体系结构约定,参数不会更改传递。 float
对于非原型(即 K&R 样式)函数、 float
参数首先被提升为 type double
、然后传递。
遗憾的是、某些形式的调试信息并不能可靠地指示函数是否进行原型设计。 如果 gdb 调用未标记为原型的函数、则会查询 set c穿透 浮点到双精度。
set coerce-float-to-double
set coerce-float-to-double on
- 类型参数
float
double
在传递到未原型化函数时将提升为。 这是默认设置。 set coerce-float-to-double off
- 类型的参数
float
将直接传递给未进行原型设计的函数。