2.7 程序状态

简介: 通过跟踪程序执行步骤并记录变量,可监视程序状态,即收集程序执行中各变量的值,形成计算机当前状态的快照。尽管手动模拟大规模循环不现实,但可通过跟踪部分循环及在关键点添加printf()语句来检查程序状态和变量变化,之后可删除这些语句并重新编译程序。

通过逐步跟踪程序的执行步骤,并记录每个变量,便可监视程序的状态。程序状态是在程序的执行过程中,某给定点上所有变量值的集合。它是计算机当前状态的一个快照。
我们刚刚讨论了一种跟踪程序状态的方法:自己模拟计算逐步执行程序,但是,如果程序中有10000次循环,这种方法恐怕行不通。不过,你可以跟踪一小部分循环,看看程序是否按照预期的方式执行。另外,还要考虑一种情况:你很可能按照自己所想去执行程序,而不是根据实际写出来的代码去执行。因此,要尽量忠实于代码来模拟。
定义语义错误的另一种方法是:在程序中的关键点插入额外的printf()语句,以监视指定变量值的变化。通过查看值的变化可以了解程序的执行情况。对程序的执行满意后,便可删除额外的printf()语句,然后重新编译。

目录
相关文章
|
1月前
|
存储 程序员 C语言
3.1 C语言基本数据类型
在C语言中,整数类型如`int`类型是很有用的,它属于有符号整型,意味着该类型的值必须是整数,并且可以是正整数、负整数或者零。`int`类型的数值范围依据计算机系统有所不同,通常取决于系统的位宽。例如,在早期16位的IBM PC兼容机上,`int`类型使用16位存储,取值范围为-32768至32767;而在当前32位系统中,使用32位存储,拥有更宽泛的取值范围。随着64位处理器的普及,`int`类型能够存储的整数范围将进一步扩大。根据ISO C标准,`int`类型的最小取值范围被规定为-32768到32767。系统通常会利用一个特殊的位来表示整数的正负。
32 10
|
11月前
|
算法 架构师 Java
【计算机专业】岗位方向细分与发展提升建议
【计算机专业】岗位方向细分与发展提升建议
|
开发者 黑灰产治理
专家博主最新专享福利上线!发文即得积分好礼!
最新专享福利上线!赢取海量积分兑换心仪礼品
581 0
|
1月前
|
C语言
3.4 C语言基本数据类型2
在C语言中,声明一个整型(int)变量时,需先写入'int'关键字,后跟变量名并以分号结尾。若同时声明多个变量,可在'int'后用逗号分隔列出所有变量名。例如,`int erns;` 或 `int hogs, cows, goats;` 都是合法声明。变量声明后需通过赋值语句如 `cows = 112;` 或使用函数如 `scanf()` 来初始化其值。
43 10
|
1月前
|
编译器 程序员 C语言
2.8关键概念
编程充满挑战,需具备抽象与逻辑思维,同时注重细节。在日常交流中,小错误或不完整句子不会影响理解,但编译器却严格得多。本章旨在帮助读者理解C程序的本质,即对计算机任务的描述。编译器将任务转化为底层机器语言,但由于不具备智能,你需要使用C语言标准规定的术语明确表达意图。
54 10
|
20天前
|
SQL 人工智能 安全
【灵码助力安全1】——利用通义灵码辅助快速代码审计的最佳实践
本文介绍了作者在数据安全比赛中遇到的一个开源框架的代码审计过程。作者使用了多种工具,特别是“通义灵码”,帮助发现了多个高危漏洞,包括路径遍历、文件上传、目录删除、SQL注入和XSS漏洞。文章详细描述了如何利用这些工具进行漏洞定位和验证,并分享了使用“通义灵码”的心得和体验。最后,作者总结了AI在代码审计中的优势和不足,并展望了未来的发展方向。
|
1月前
|
C语言
3.1C语言基本数据类型
在C语言中,初始化变量是指为变量设定初始值,通常在声明时直接完成,例如 `int cows=32;`。应注意避免在同一语句中混合初始化与未初始化的变量,如 `int dogs, cats=94;` 这样的写法容易引起误解。此外,整型常量如21、32等在C语言中被视为int类型,但非常大的整数则不然,且带有小数点或指数的数值不属于整型常量。
26 9
|
1月前
|
C语言
2.6 语法错误
在编程时,不遵循C语言的规则会导致语法错误,类似于英语中的语法错误。例如,nogood.c 程序中存在多个错误:main() 函数体使用了圆括号而非花括号;变量声明格式不正确;注释末尾缺少 */(或应将 /* 替换为 //);printf() 语句末尾漏掉了分号。
50 6
|
1月前
|
C语言
2.5进一步使用C
该程序首先通过注释说明了文件名及程序目的,展示程序说明的必要性。接着,它在同一行内声明了两个变量`feet`和`fathoms`,简化代码结构。随后,利用C语言中的乘法运算符`*`进行简单数学运算,将`fathoms`变量值乘以6并赋给`feet`。最后,使用`printf()`函数以新颖的方式输出多个值,展示了如何在单次调用中打印不同内容。
37 6
|
1月前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
139 10