当前位置: 首页 > 文档资料 > Swoole 中文文档 >

提交错误报告

优质
小牛编辑
141浏览
2023-12-01

需知

当你觉得发现了一个Swoole内核的bug时,请提出报告。 Swoole的内核开发者们或许还不知道问题的存在, 除非你主动提出报告,否则BUG也许将很难被发现并修复, 你可以在 Github的issue区 提出错误报告(即点击右上角绿色的New issue按钮),这里的错误报告将会被最优先解决。 请不要在邮件列表或私人信件中发送错误报告,Github的issue区同样可以提出对于Swoole的任何要求与建议。

在你提交错误报告之前,请先阅读以下的如何提交错误报告

新建问题

首先在创建issue的同时,系统将会给出如下模板,请你认真填写它,否则issue由于缺乏信息可能会被忽略:


Please answer these questions before submitting your issue. Thanks!
> 在提交Issue前请回答以下问题:

1. What did you do? If possible,provide a simple script for reproducing the error.
> 请详细描述问题的产生过程,贴出相关的代码,最好能提供一份可稳定重现的简单脚本代码。

2. What did you expect to see?
> 期望的结果是什么?

3. What did you see instead?
> 实际运行的结果是什么?

4. What version of Swoole are you using (`php --ri swoole`)?
> 你的版本? 贴出 `php --ri swoole` 所打印的内容 

5. What is your machine environment used (including the version of kernel & php & gcc)?
> 你使用的机器系统环境是什么(包括内核、PHP、gcc编译器版本信息)?   
> 可以使用`uname -a`,`php -v`,`gcc -v` 命令打印

其中,最为关键的是提供可稳定重现的简单脚本代码,否则你必须提供尽可能多的其它信息来帮助开发者判断错误原因

关于段错误(核心转储)

此外,在一种特殊情况下你可以使用调试工具来帮助开发者定位问题

WARNING swManager_check_exit_status: worker#1 abnormal exit, status=0, signal=11

当如上提示出现在Swoole日志中(signal11),说明程序发生了核心转储,你需要使用跟踪调试工具来确定其发生位置

使用gdb来跟踪swoole前,需要在编译时添加--enable-debug参数以保留更多信息

开启核心转储文件

ulimit -c unlimited

触发BUG,核心转储文件会生成在 程序目录 或 系统根目录 或 /cores目录下 (取决于你的系统配置) 键入以下命令进入gdb调试程序

gdb php core
gdb php /tmp/core.1234

紧接着输入bt并回车,就可以看到出现问题的调用栈

(gdb) bt

可以通过键入 f 数字 来查看指定的调用栈帧

(gdb) f 1
(gdb) f 0

将以上信息都贴在issue中

内存分析 (强烈推荐)

更多时候,Valgrind比gdb更能发现内存问题,通过以下指令运行你的程序,直到触发BUG

USE_ZEND_ALLOC=0 valgrind --log-file= php xxx.php
  • 当程序发生错误时,可以通过键入 ctrl+c 退出,然后上传 /tmp/valgrind.log 文件以便于开发组定位BUG。