在使用多线程文件对cbmc测试仍然失败后,忙碌了一天的王师傅依旧一无所获。于是他决定先放一放测试的问题,开始研究源码,在一遍一遍的调试过框架后,王师傅依旧一头雾水,无从下手,于是他决定从最基础的函数看起,就从这个看起来就跟多线程有关系的has_threads函数开始
SSA_steps和step都是SSA_stept类型,所以很明显下一步会是看该类。
好,依旧是一层套一层,无从下手,放弃,以上的话当我放屁。不过在过了一遍又一遍流程后,对整个代码的执行有个比以前更清晰的认识。
首先,我觉得cbmc_parse_options.cpp是最能体现整个结构的文件。
645以上,笼统来说,都是对测试文件的加载与预处理 ,而646是对预处理结果的分析,将结果进行保存,647是对保存的结果进行输出,然后649结束。这样一看结构就比较清晰了。
645以上的部分,又可以分为几个小部分,其中涉及到两个中间变量,第一个叫做goto模型。
如图,代码所在文件看图片左上角。676行就是对goto模型的初始化。
第二个变量叫做properties,其实还存在第三个变量,好像叫sorted_properties,就是对第二个变量进行一个排序,图我就不放了,最终对结果的判断就是基于sorted_properties进行的,而properties又是通过goto模型得到的,环环相扣。
调试过程中需要特别注意以上这些地方,都是流程的关键部分。
我们想要看的mm命令并不是单独出来的,同样都是通过对sorted进行判断得出的,所以看懂如何得到sorted还是很必要的,所有的信息都是存储在里面的。