gpt4 book ai didi

c - 用于查找二进制可执行代码中内存泄漏的测试脚本或测试工具

转载 作者:行者123 更新时间:2023-11-30 21:37:43 24 4
gpt4 key购买 nike

我想用c语言编写脚本,供测试人员发现嵌入式测试中的内存泄漏。请帮助我编写脚本以及使用哪个工具来运行脚本来查找内存泄漏。我需要为只进行测试的测试人员编写脚本。想用c语言写脚本。该项目与ipstack协议(protocol)相关。

最佳答案

检测嵌入式系统中的运行时错误(例如内存泄漏)可能是一门艺术。

为测试人员提供脚本可能不是最好的方法。

程序员检测是否存在运行时错误的最有效的工具之一是在源代码中自由使用断言语句。断言本质上是免费的并且非常易于使用。

您的测试人员需要有某种标准输出控制台。您还需要为他们提供一个使用未定义的 ndebug 符号编译的二进制文件,或者您需要在断言周围放置一个包装器,以允许在定义 ndebug 时将其保留在程序中。这可能意味着您的测试人员需要一个调试器(某些平台默认通过 JTAG 或 ICSP 端口推送标准输出),但为他们提供二进制文件可能仍然是一种选择。

以下是断言的一些好处:您应该断言从一个函数传递到另一个函数的指针在您期望的范围内(以帮助检测杂散、未初始化或超出范围的指针),您应该断言堆栈上声明的变量仍在堆栈的定义范围内(以帮助检测堆栈溢出),您应该断言 malloc 永远不会返回 null 如果您使用动态内存(以帮助检测内存泄漏),您应该断言内存只是在写入缓冲区后,任何静态数据结构(例如环形缓冲区)之外的数据都不会被意外修改(以帮助检测索引越界问题),并且您应该断言全局变量/结构在使用它们之前已初始化。

否则,有无数针对嵌入式系统的静态分析器,它们对 C 代码执行抽象解释,并可以帮助查找内存泄漏、空指针取消引用、除以零等内容。不过,这些工具可能会非常昂贵。你可以看看polyspace、frama-c、astree、escher c verifier,可能还有其他的。其中一些需要注释来告诉静态分析器一些关于您期望代码如何运行的信息。

如果您的问题确实是内存泄漏,那么我必须问:您为什么首先使用动态内存?在所有内存都被占用的嵌入式系统中,为什么不能使用静态内存和堆栈做您需要做的事情?

关于c - 用于查找二进制可执行代码中内存泄漏的测试脚本或测试工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27880601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com