项目从 Ubuntu 移植到 Debian 出现莫名其妙的 bug。

205 天前
 huahsiung

项目是半年前上线的,一共留下了有两个版本。Linux ( Ubuntu 下 gcc 编译) Windows (本地测试版本,vs 编译的)。

然后项目跑的 docker 里面的。

最近迁移服务器,换了一个 host OS(从 Ubuntu 换到 Debian)。因为是 docker ,除了内核嘛,其他都差不多。想都没想,直接 docker save ---> docker load ,扔过去。

然后在 Debian host OS 上,发现没启动。于是尝试手动启动,发现启动大概 1s 后,Segmentation fault 错误。


然后以为程序有 bug ,找了半天,真的找到了一个 bug 。修改测试,还是报 Segmentation fault 。大概不是这个 bug 引起的。 然后我想,之前服务器顶住 bug 跑了半年都没出事。怎么可能迁移就出事。这个 bug 应该不是致命错误。于是又改回去。

.

从早上九点忙到晚上 10 点,本来准备 2h 就完成的,但是出现莫名其妙的 bug ,虽然给了半个月迁移的时间

期间莫名其妙的比对过 md5sum ,一模一样!,但是就是无法在新的 Debian host 上运行。而老 Ubuntu 顶住 bug 跑也正常。没办法,找不到,项目又要迁移。


然后到晚上了。心好累啊,就破罐破摔。能上线就不错了,哪里要求这么多啊,就把 Windows 下的版本制作为一个 docker 版本的 wine 。然后把 Windows 版的程序扔到 wine 镜像里面,测试了一下,卧。槽,卧。槽!!!完全正常,没任何问题!!。

上线了。!!

想了想,唯一的区别就算内核了,我不知道是不是 Ubuntu 的内核什么不同。 虽然现在不是生产环境。但是如果 wine 没出错。半个月后主服务器就会迁移,或许就会变成生产环境了。

. .

安装以前的规律,只要没出错,根本没人注意到 wine 。就算出错了,一般也是 docker restart 。

虽然如此明显。但是也依然不会有人注意。

用 wine 跑项目感觉特别危险。没办法,哎,孤立无援啊。现在只有我接手前任代码后,一个人在维护。里面指针看上去就是到处乱飞。

希望下一个接手的人不要炸掉。


感觉只有两个可能:

1.Debian Linux 内核版本比 Ubuntu 高。

2.Ubuntu 内核问题。Ubuntu 自动把 bug 优化了???


希望以后不要看到这样的的帖子:“生产环境出现重大事故,项目竟然用 wine 跑了快 1 年”。

因为迁移本来就算没的。算莫名其妙来的“义务”吧。

wine 解决方案完美,唯一缺点就是容器多了 1G 空间占用。

3324 次点击
所在节点    Linux
43 条回复
mikewang
205 天前
程序和人,有一个能跑就行?
ferock
205 天前
所以,论 docker 沙盒的重要性
zedpass
205 天前
先把 Debian 装上和 Ubuntu 一样的 Docker 版本再试下
Achilless
205 天前
docker 版本一样吗
nightwitch
205 天前
Segmentation fault 错误首先怀疑 libc 和 libstdc++的问题吧。
wqtacc
205 天前
能重新再 debian 下编译打包吗
virusdefender
205 天前
至少先 gdb 下啊
cnbatch
205 天前
针对这个程序,建议专门用 Debian 做开发测试,说不定更容易找得到真正的 bug
bjzhush
205 天前
碉堡了
我从来没想过 wine 还能跑在服务器上
之前是非常排斥 wine 的,觉得这玩意就是杂交,非要把 win 下的东西搞到 Linux 上跑,用了十几年 Ubuntu 从来不 wine
ysc3839
205 天前
遇到了 undefined behavior 吧,各种因素影响之下,发生什么都是有可能的。
@bjzhush 也不奇怪,还有在服务器上用 WSL 或者 MSYS2 的,就是损失一些性能而已。
huahsiung
205 天前
再说一下,本地 Debian ( GUI xfce )运行并无 bug ,但是到服务器上面就有 bug 了。

wine 能跑就行,反正只是项目的一个组件。并不是全部项目
SupperMary
205 天前
让我想起来我编译 AOSP13 的代码,死活编译不过,搞了快一个星期,最后把 kernel 从 6.x 降到 5.x 编译过了
LitterGopher
205 天前
已经能想到后面的人接手是什么心情了,哈哈哈哈和。
kkk9
205 天前
搞个 debian 虚拟机直接调试看看结果?
fpk5
205 天前
内核不一样很难说,可能是内核编译参数不一样导致行为不一样也有可能是在 ubuntu 能跑纯粹是运气。
sadfQED2
205 天前
卧槽,wine 跑线上服务,这能震惊我一整天
kaiveyoung
205 天前
之前有个项目,换了个平台段错误,debug 了好几个小时,发现是有个 int 函数没 return ,未定义行为真的会在不同平台触发不同的异常
ho121
205 天前
段错误,大概率是 c 或 c++写的吧。
c 或 c++有一些写法会产生未定义的行为,比如指针之间做加减运算。不同平台处理方式不一样。
tramm
205 天前
Docker 版本多少
lrh3321
205 天前
CPU 型号也一致?之前试过编译 dpdk 程序,默认按编译机器的指令集来构建。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/982916

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX