《Effective Debugging:软件和系统调试的66个有效方法》——第19条:使调试任务自动化

简介:

本节书摘来自华章计算机《Effective Debugging:软件和系统调试的66个有效方法》一书中的第2章,第19节,作者[希]迪欧米迪斯·斯宾奈里斯(Diomidis Spinellis),爱飞翔 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第19条:使调试任务自动化

我们或许会找到很多个与程序错误有关的因素,但是却没有办法轻易推断出究竟哪一个因素才是致使程序出错的真正原因。为了把这个原因找出来,我们可以编写一小段例程或脚本,把有可能使程序出错的所有情况全都搜索一遍。如果待搜索的情况比较多,不便于手工进行搜索,但是却能够通过循环来进行遍历,那么就可以考虑对其加以自动化。例如,如果想遍历的是500个字符,那么可以通过自动化的脚本来实现,然而如果要把用户可能会输入的所有字符串全都尝试一遍,那么采用自动化脚本就不太合适了。

下面举一个例子。假设在某次升级之后,我们发现,计算机执行which命令的速度比原来慢了,然而把那一串比较长的搜索路径(Windows和Unix系统用PATH变量来代表该路径)改成/usr/bin之后,which命令的速度又快了起来。于是问题就来了:在该路径的26个元素中,到底是哪一个元素拖慢了which命令的速度?下面这个Unix shell脚本,可以显示出which命令在单独采用路径中的每一个组成部分时,所分别消耗的时间(我们通过Cygwin,在Windows系统里面运行这个脚本)。
image

脚本所输出的其中一部分内容如下:
image

由此我们可以发现,问题出在只含有一个斜线符号(/)的元素上面,这个斜线不小心跑到which命令的搜索路径里面来了。然后,我们对which命令的执行方式进行追踪(参见第58条),于是就找到了问题的根源:由于which命令会在路径中的每个元素后面补充一个斜线,因此,本来只包含一个斜线的那个元素,在搜索的时候就相当于变成了双斜线(//),而Windows系统如果遇到了这种以双斜线开头的路径,则会触发查找网络驱动器的流程。

如果你正在调试的这款软件,很难通过脚本来执行穷举式的搜索,那么可以考虑在程序中嵌入一个小的例程,以实现相同的目标。该例程通过某种算法(例如,对某些值进行迭代),把有待测试的各种情况全都生成出来。此外,也可以考虑使程序从某个外部文件中,把这些有待测试的情况读取进来,这样就可以用更为复杂的脚本或执行日志中的某些数据来生成那个外部文件了。

最后,我们还可以用一些工具来评估代码,以检测其中的API违例、内存缓冲区溢出以及竞争条件等问题(参见第59条和第62条)。用了这些工具之后,原本只需几秒钟就能运行完的测试分析任务,现在可能需要几十分钟,然而这是值得等待的,因为它们毕竟能够帮你省下大量的时间。

要点

  • 把寻找程序故障的过程自动化,使得计算机多费一些功夫去搜寻,从而节省你自己的宝贵时间。
相关文章
|
12月前
|
人工智能 数据可视化 数据挖掘
团队日报不用愁!自动化生成工具亲测:任务进度实时同步
本文深入分析了传统手动日报在数据孤岛、格式混乱和时效性差三大痛点,并探讨了自动化日报带来的效率提升、决策优化等四大核心价值。通过对板栗看板、SmartBrief、n8n 等六款主流工具的功能、适用场景及实战效果进行测评,为企业提供科学的选型建议与实施路径。
团队日报不用愁!自动化生成工具亲测:任务进度实时同步
|
存储 人工智能 API
OWL:告别繁琐任务!开源多智能体系统实现自动化协作,效率提升10倍
OWL 是基于 CAMEL-AI 框架开发的多智能体协作系统,通过智能体之间的动态交互实现高效的任务自动化,支持角色分配、任务分解和记忆功能,适用于代码生成、文档撰写、数据分析等多种场景。
2367 13
OWL:告别繁琐任务!开源多智能体系统实现自动化协作,效率提升10倍
|
机器学习/深度学习 人工智能 自然语言处理
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
CogAgent-9B 是智谱AI基于 GLM-4V-9B 训练的专用Agent任务模型,支持高分辨率图像处理和双语交互,能够预测并执行GUI操作,广泛应用于自动化任务。
923 12
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
|
人工智能 Linux API
PromptWizard:微软开源 AI 提示词自动化优化框架,能够迭代优化提示指令和上下文示例,提升 LLMs 特定任务的表现
PromptWizard 是微软开源的 AI 提示词自动化优化框架,通过自我演变和自我适应机制,迭代优化提示指令和上下文示例,提升大型语言模型(LLMs)在特定任务中的表现。本文详细介绍了 PromptWizard 的主要功能、技术原理以及如何运行该框架。
1438 8
PromptWizard:微软开源 AI 提示词自动化优化框架,能够迭代优化提示指令和上下文示例,提升 LLMs 特定任务的表现
|
存储 安全 数据可视化
用Python实现简单的任务自动化
本文介绍如何使用Python实现任务自动化,提高效率和准确性。通过三个实用案例展示:1. 使用`smtplib`和`schedule`库自动发送邮件提醒;2. 利用`shutil`和`os`库自动备份文件;3. 借助`requests`库自动下载网页内容。每个案例包含详细代码和解释,并附带注意事项。掌握这些技能有助于个人和企业优化流程、节约成本。
734 3
|
缓存 监控 安全
公司电脑监控软件的 Gradle 构建自动化优势
在数字化办公环境中,公司电脑监控软件面临代码更新频繁、依赖管理和构建复杂等挑战。Gradle 构建自动化工具以其强大的依赖管理、灵活的构建脚本定制及高效的构建缓存与增量构建特性,显著提升了软件开发效率和质量,支持软件的持续更新与优化,满足企业对员工电脑使用情况的监控与管理需求。
452 3
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
378 5
|
机器学习/深度学习 算法 文件存储
神经架构搜索:自动化设计神经网络的方法
在人工智能(AI)和深度学习(Deep Learning)快速发展的背景下,神经网络架构的设计已成为一个日益复杂而关键的任务。传统上,研究人员和工程师需要通过经验和反复试验来手动设计神经网络,耗费大量时间和计算资源。随着模型规模的不断扩大,这种方法显得愈加低效和不够灵活。为了解决这一挑战,神经架构搜索(Neural Architecture Search,NAS)应运而生,成为自动化设计神经网络的重要工具。
1059 0
|
运维 Ubuntu Linux
自动化运维:使用Ansible简化日常任务
在快节奏的IT世界中,时间就是一切。本文将揭示如何通过Ansible这一强大的自动化工具来节省宝贵的时间,从而提高效率和减少人为错误。我们将深入探讨Ansible的核心概念、安装过程以及如何编写简单的playbook来自动执行常见运维任务。无论你是新手还是有经验的系统管理员,这篇文章都将为你提供实用的知识和技能,让你能够更好地控制你的服务器环境。
|
测试技术 持续交付
探索自动化测试在软件质量保证中的关键作用
本文深入探讨了自动化测试在现代软件开发生命周期中的重要性,以及它是如何成为确保软件产品质量的不可或缺的一环。通过分析自动化测试的优势、挑战和最佳实践,本文旨在为读者提供对自动化测试全面而深刻的理解,从而帮助他们在实际工作中更有效地应用自动化测试策略。
280 2

热门文章

最新文章