隐藏文件写入失败BUG的分析过程

事件过程,很杂乱,可以不看。

一个服务程序,在客户部署环节,时不时就会出现服务启动就崩溃的问题。非常奇怪,本地完全无法复现。

这一次,经研发远程调试发现,反复启动几次就能成功启动服务(后来证明其中漏掉了关键步骤)。

反馈到我这里,安排了测试工程师复现问题。测试工程师在自己测试电脑上反复安装、启动、重启、卸载,无法复现。

我又找来和客户一模一样的设备,交给测试工程师验证,安装卸载多次,依然无法复现。

困局啊。。。

找来研发工程师,远程调试的那位,“小A,你来一下,你把你在远程操作的过程,重新操作一遍。”,坐下,然后开始安装,设置,隐藏目录。

“等会,隐藏目录干什么?”

“实施工程师在客户那就是这么干的,我按照那边步骤来的。”

“好,你继续”

启动服务,服务崩溃,问题复现。

查看dump文件,崩溃在算法,找算法工程师,看吧,崩溃在算法,解决一下呗。

给算法演示,一遍,设置显示,设置隐藏崩溃;二遍设置不隐藏,服务启动成功,第三遍,设置隐藏,服务启动成功,耶服务成功了。从头再来。。。

过程很是折腾,简单点,最后工程师定位在算法模块调用的printf函数上。

----------------------------------------------------------------------------------------------------------

个人习惯比较特别,特别爱解决别人解决得模模糊糊的或解决不了的问题。

模仿服务,写代码,重定向stdout,然后隐藏文件夹,运行,没崩溃,再运行没崩溃,反复10余次,没崩溃。

重新设置为显示,再隐藏,运行,崩溃。终于复现。

崩溃在printf中,好,顺腾摸瓜,检查freopen_s返回错误(所有的错误其实都是这里没有检查函数返回状态引起的,然后逐步传递加深,导致排查越来越麻烦。)返回13,错误,但难于分辨是什么原因。

继续去掉多层目录的隐藏属性,逐层设置,哦,最后确认跟目录的隐藏没关系,只要被重定向的文件有隐藏属性就会崩溃。

好,再继续,文件设置成隐藏,修改文件打开方式,w,w+,,wb,a,a+等全部试验一遍,带W的都失败。

缩小问题范围了,google吧,找到官方文档:

https://docs.microsoft.com/zh-cn/windows/win32/api/fileapi/nf-fileapi-createfilea

这就是为什么文件存在,且是隐藏的时候,w模式会失败,这等于从原文件继承了hidden属性,w则是create_always属性,函数执行失败,而c语言的freopen_s函数想来是包装了createfile函数(未经验证),错误就藏得更深了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值