栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Hexagon GDB Debugger介绍(31)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hexagon GDB Debugger介绍(31)

Hexagon GDB Debugger介绍(31)
      • 2.15.3 类型和范围检查

2.15.3 类型和范围检查
注意:
在此版本中,包括用于类型和范围检查的调试器命令,但它们还没有任何效果。 本节记录了预期的设施。

某些语言旨在通过一系列编译和运行时检查来防止您犯看似常见的错误。 这些包括检查函数和运算符的参数类型,并确保在运行时捕获数学溢出。 通过消除类型不匹配并在程序运行时提供对范围错误的主动检查,诸如此类的检查有助于确保程序在编译后的正确性。

如果需要,调试器可以检查上述条件。 尽管调试器不检查程序中的语句,但它可以检查直接输入调试器的表达式,例如通过打印命令进行评估。 与工作语言一样,调试器也可以根据程序的源语言决定是否自动检查。 支持语言的默认设置请参见第 2.15.4 节。

类型检查
一些语言是强类型的,这意味着运算符和函数的参数必须是正确的类型,否则会发生错误。 这些检查可防止类型不匹配错误导致任何运行时问题。 例如:

1 + 2 => 3

… 但:

error--> 1 + 2.3

第二个示例失败,因为整数值 1 与浮点值 2.3 的类型不兼容。

对于您在调试器命令中使用的表达式,您可以告诉调试器类型检查器跳过检查; 将任何不匹配视为错误并放弃表达式; 或者仅在发生类型不匹配时发出警告,但无论如何都要评估表达式。 当您选择最后一个时,调试器会像上面的第二个示例一样评估表达式,但也会发出警告。

即使关闭类型检查,也可能有其他与类型相关的原因阻止调试器评估表达式。 例如,调试器不知道如何添加 int 和 struct foo 。 这些特定类型的错误与使用的语言无关,通常是由表达式引起的,例如上面描述的表达式,无论如何评估都没有什么意义。

C 要求算术运算符的参数是数字。 枚举类型和指针可以表示为数字,因此它们是数学运算符的有效参数。 有关特定语言的更多详细信息,请参阅第 2.15.4 节。

调试器提供了一些额外的命令来控制类型检查器:

set check type auto
根据当前工作语言打开或关闭类型检查。 有关每种语言的默认设置,请参阅第 2.15.4 节。

set check type on
set check type off
打开或关闭类型检查,覆盖当前工作语言的默认设置。 如果设置与语言默认值不匹配,则发出警告。 如果在类型检查打开时计算表达式时出现任何类型不匹配,调试器将打印一条消息并中止表达式的计算。

set check type warn
导致类型检查器发出警告,但始终尝试评估表达式。 由于其他原因,可能仍然无法评估表达式。 例如,调试器不能添加数字和结构。

show type
显示类型检查器的当前设置以及调试器是否自动设置它。

范围检查
在某些语言中,超出类型的界限是错误的; 这是通过运行时检查强制执行的。 这种范围检查旨在通过确保计算不会溢出或数组元素访问的索引不会超出数组的边界来确保程序的正确性。

对于您在调试器命令中使用的表达式,您可以告诉调试器以以下三种方式之一处理范围错误:忽略它们、始终将它们视为错误并放弃表达式,或者发出警告但仍然评估表达式。

数值溢出、超出数组索引范围或键入的常量不是任何类型的成员都可能导致范围错误。 但是,某些语言不会将溢出视为错误。 在 C 的许多实现中,数学溢出导致结果“环绕”到较低的值:例如,如果 m 是最大的整数值,而 s 是最小的,则:

m + 1 => s

这也是特定于个别语言的,并且在某些情况下特定于个别编译器或机器。 有关特定语言的更多详细信息,请参阅第 2.15.4 节。

调试器提供了一些额外的命令来控制范围检查器:

set check range auto
根据当前工作语言设置打开或关闭范围检查。 有关每种语言的默认设置,请参阅第 2.15.4 节。

set check range on
set check range off
打开或关闭范围检查,覆盖当前工作语言的默认设置。 如果设置与语言默认值不匹配,则会发出警告。 如果发生范围错误并且范围检查打开,则会打印一条消息并中止表达式的计算。

set check range warn
当调试器范围检查器检测到范围错误时输出消息,但无论如何都尝试计算表达式。 由于其他原因,例如访问不属于该进程的内存(许多 UNIX 系统的典型示例),可能仍然无法评估表达式。

show range
显示范围检查器的当前设置以及它是否由调试器自动设置。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630307.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号