- 博客(10)
- 收藏
- 关注
原创 Tree-sitter安装过程
注意:在这里可能会发生找不到tree-sitter-c文件夹,tree-sitter没有build_library函数,CompileError: command '/usr/bin/cc' failed with exit code 1等等问题,第一个问题可以通过修改py文件中的路径为绝对路径解决,后面的问题我是通过不断切换tree-sitter版本进行尝试,最后发现21版本不会发生任何问题。个人排查下来,0.20,0.22-0.25在安装过程中各有各的问题,0.21能一次性装上。
2025-11-05 16:12:35
206
原创 dify本地安装部署+internal server error--initdb:error解决方法
经查询后面issue中提到的解决方法,问题应该是【wsl环境的docker环境里面的程序无权限访问windows环境下载的dify文件夹,重新在wsl下git就能拉起。但,我运气向来很差,遇到的问题之一就是,可以在desktop中看见一闪一闪始终启动不了的db-1,可以进入localhost,但一直显示不出来且右上角显示internal server error。1、在当前docker目录下,创建/home/{你的路径}/volumes/db/data目录,你的路径大概率就是用户名,自己创建好后记录下来。
2025-07-20 15:08:26
1778
原创 接口自动化测试——实战项目ZrLog
该实战项目来源于江楚老师编写的《接口自动化测试项目实战》一书,分为两个部分,第一部分是接口自动化测试基础,包含:部署被测系统ZrLog(Docker),Request库,os库,logging库,PyMySQL库,pytest框架的使用;第二部分为构建接口自动化测试框架,应用第一部分的知识对ZrLog项目设计测试用例,搭建接口自动化测试框架,实现接口自动化测试框架的持续集成等。我在这里写下这篇博客是为了记录完成这次实战的过程,以及自己在过程中遇见的一些问题,分享给大家。
2024-12-17 16:38:04
1519
5
原创 ACSL及frama-c学习笔记(七)——逻辑定义及ghost code
公理是我们声明在任何情况下都为真的属性。这是一种陈述复杂属性的好方法,通过抽象它们的复杂性,可以使证明过程更有效。当然,由于任何以公理形式表达的属性都被假定为真,因此我们在使用它们来定义属性时必须非常小心:如果我们在假设中引入一个假的属性,“假”就会变成“真”,然后任何东西都会被证明为真了。/*@*//*@*/区别公理和引理:引理lemma,需要我们提供证明为真,公理axiom,无需证明,总是被假设为真。/*@*/
2024-11-11 19:16:43
671
原创 ACSL及frama-c学习笔记(六)——谓词、逻辑函数、引理
一旦这个证明完成,它所陈述的信息就可以安全地用于简化其他更复杂的证明中的推理,而无需再次证明。比如说在任何情况下都有引理P => Q,如果在某个程序点,我们需要证明Q而且我们正好有P,那么立即推,Q成立。例如,我们可以将valid_range_ r重新定义为一个谓词,该谓词同时接受要考虑的范围的开始和结束的参数。这部分可以多看一下原教程,教程链接在函数合约开始那部分,这篇博客对应第五章的所有内容,里面还有很多示例和习题,我就不一一搬运了。例如,我们可以定义确保固定大小堆栈的安全性所需的规范。
2024-11-07 21:25:32
884
原创 ACSL及frama-c学习笔记(五)——循环
当循环结束时,我们增加了循环条件为假的知识,这应该允许我们推断出循环的后置条件已经得到验证。当循环结束时,有条件:!(i < 30)为真,即i >= 30,而根据loop invariant,在最后一次循环跳出时也有0 <= i <= 30,所以(i >= 30 && 0 <= i <= 30) ==> i == 30,循环的后置条件显然成立。看起来这个后置条件是可以被验证的,但实则不然,因为WP在遇到循环时,不允许推到不属于循环不变量的信息,WP只考虑不变式提供的信息,因此,这个函数不能被证明。
2024-11-07 19:27:37
1012
1
原创 ACSL及frama-c学习笔记(四)——函数合约之Well specified function
检查规范是否足够精确的一个好方法就是测试,事实上,这基本上就是我们对例子max和swap所做的。我们已经写了规范的第一个版本,通过这些代码,调用相应的函数来验证是否可以证明一些期望从函数合约中的容易证明的属性。最重要的思想是在不考虑函数内容的情况下确定契约(至少在第一步中是这样),如果我们写的合约太直接地考虑了它的代码,我们就有引入同样bug的风险(Overfitting的感觉),比如考虑了一个错误的条件结构。
2024-11-06 22:16:48
840
原创 ACSL及frama-c学习笔记(三)——函数合约之合约定义
更准确地说,这里在调用之后,我们假设前提条件仍然为真(因为函数没有修改任何内存),因此我们假设INT_MIN 0/1 都为真,也就是前提为假,结果必真)。随后我们执行验证,发现多出了一个rte的assert,并且这条assert验证失败,原因可以看这个系列的第一篇博客,这是由于int类型的补码导致的,对于这些绿橙参半的圆圈,在第一篇里也有解释。用下面的函数来说明它的用法,该函数返回输入值的绝 对值。
2024-11-06 10:02:46
1036
原创 ACSL及frama-c学习笔记(二)——ACSL基本语法
requires:指定函数或代码块执行前必须满足的条件。ensures:指定函数或代码块执行后必须满足的条件。assigns:指定函数或循环中可能被修改的变量集合,这有利于帮助分析工具理解函数的修改范围。a : b);*/else {用于定义一个可重用的逻辑表达式,这个表达式可以在多个地方被引用。假设我们有一个函数,它检查一个整数是否在某个范围内。我们可以使用predicate来定义这个范围,并在requires和ensures子句中使用它。int lower;int upper。
2024-11-05 00:03:53
1186
原创 ACSL及frama-c学习笔记(一)
"ANSI/ISO C 规范语言"(the ANSI/ISO C Specification Language,简称 ACSL)是一种用于C程序的行为规范语言。作为一种形式化语言,ACSL使得函数契约的精确规范成为可能,这不仅使得规范对人类可读,而且可以被分析工具所操作。ACSL的一个更强大的功能是给整个函数订立函数合约。例如,可以定义一个函数来计算数组中的最大值,并赋予它相应的函数合约(函数合约是软件工程中用于描述函数行为的一种形式化方法。
2024-11-04 17:52:51
1528
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅