当clang静态分析器内核观察多线程编程构造时,它找不到任何关于它的行为的文档。内核是否识别它们并为每个线程创建单独的路径?
发布于 2022-05-23 08:46:05
不,Clang静态分析器不尝试直接分析多个线程的同时执行。相反,它一次只分析一条路径。引用开发人员手册
分析器核心执行给定程序的符号执行。所有输入值都用符号值表示;此外,引擎根据输入符号和路径推导程序中所有表达式的值。执行是路径敏感的,并探索每一个可能的路径通过程序。
Clang执行的与线程相关的检查是在单个路径的上下文中完成的。在浏览可用检查人员列表时,我发现了三个与C/C++线程相关的线程(目标C也有一些):
mtx_t API的使用情况,特别是双锁和(我认为)未能释放锁。pthread_mutex_lock和相关函数进行类似的检查。除了这些检查程序之外,还有Clang 螺纹安全分析系统,它依赖程序员提供的注释来(主要)强制正确使用互斥以保护共享数据。
所有这些都有一个共同点,就是所执行的属性需要在单个线程的上下文中正确地使用API。分析器不需要考虑其他线程可能在做什么来诊断这些问题。
一些商业静态分析工具有更多和更复杂的分析来检测线程代码的问题,并且可能考虑沿着多个独立(以及潜在的并发)路径发生的情况,但它们也不直接分析交织的可能性。
有些技术直接考虑并发执行和交织,通常与模型检验算法的某些变体一起使用,但将这些技术扩展到大于几十行代码的程序是一个开放的研究领域。
https://stackoverflow.com/questions/72343074
复制相似问题