如果您查看程序的调用堆栈并将每个返回指针视为令牌,那么需要什么样的自动机来为程序的有效状态构建识别器?
作为推论,需要什么样的自动机来为特定的错误状态构建识别器?
(注意:我只查看可以从此函数获得的信息。)
我的想法是,如果这些形成常规语言,那么可以围绕它构建一些有趣的工具。例如,给定一组崩溃/故障转储,自动将它们分组并生成识别器以识别已知错误的新实例。
注意:我并不是建议将其作为诊断工具,而是将其作为数据管理工具,用于将一堆崩溃报告变成更有用的东西。
- “这 54 次崩溃似乎是相关的,这 42 次也是如此。”
- “这些新的崩溃似乎与日期 X 之前的任何事情都无关。”
- 等等
似乎我并不清楚我想要完成什么,所以这里有一个例子:
假设您有一个包含三个错误的程序。
- 导致无效参数被传递给单个函数的两个错误导致相同的健全性检查。
- 一个函数,如果给定一个(有效的)极端情况,就会进入无限递归。
同样,当程序崩溃(断言失败、未捕获的异常、seg-V、堆栈溢出等)时,它会抓取堆栈跟踪,提取其上的调用站点并将它们发送到 QA 报告服务器。(我假设只提取该信息,因为 1,每个项目成本一次很容易获得,2,它具有简单、明确的含义,可以在没有任何关于程序的特殊知识的情况下使用)
我提议的是一个工具,它会尝试将传入的报告分类为与已知错误之一(或作为新错误)相关联。
最简单的事情是假设一个故障站点是一个错误,但在第一个示例中,在同一个位置检测到两个错误。下一个最简单的方法是要求整个堆栈匹配,但同样,这在第二个示例这样的情况下不起作用,其中您有多个(有效)有效代码可以触发相同的错误。