cloudwu/skynet

skynet segfault

kaka5548 opened this issue · 3 comments

遇到了skynet崩溃,ulimit -c是0因此没产生core 使用的skynet版本是v1.4.0
查看dmesg

[620052.716586] show_signal_msg: 24 callbacks suppressed
[620052.716588] Game[77327]: segfault at 9 ip 00005587f8c34bc8 sp 00007fad7bdf6b60 error 4 in Game[5587f8c22000+d1000]
[620052.716597] Code: 41 09 0b 49 83 c1 18 4d 39 ca 0f 86 8a 03 00 00 41 0f b6 41 09 41 0f b6 51 08 83 e0 40 f6 c2 0f 74 d8 84 c0 74 0e 49 8b 71 10 <f6> 46 09 18 0f 85 06 04 00 00 83 e2 40 74 ca 49 8b 31 f6 46 09 18

网上查的教程00005587f8c34bc8 - 5587f8c22000 得到 12bc8
使用addr2line可以获得

root@xxxx:/home/ubuntu/server_3/framework# addr2line -e Game 12bc8
/home/ubuntu/server_3/framework/skynet-src/skynet_server.c:485

查看源码skynet_server.c的485行是

static const char *
cmd_launch(struct skynet_context * context, const char * param) {
	size_t sz = strlen(param);
	char tmp[sz+1];                              //485行是这里
	strcpy(tmp,param);
	char * args = tmp;
	char * mod = strsep(&args, " \t\r\n");
	args = strsep(&args, "\r\n");
	struct skynet_context * inst = skynet_context_new(mod,args);
	if (inst == NULL) {
		return NULL;
	} else {
		id_to_hex(context->result, inst->handle);
		return context->result;
	}
}

这里只是复制一个字符串到堆栈上,看不出什么问题。会不会是某种特殊情况下,启动新服务的参数贴别长?比如 >1M 。

是否有特殊字符,导致strlen返回不正确的长度

是否是自己编译安装的gcc,有可能是编译器的问题