yyzybb537 / libgo

Go-style concurrency in C++11
MIT License
3.22k stars 758 forks source link

sample9_curl coredump #166

Closed hbt19860104 closed 5 years ago

hbt19860104 commented 5 years ago

master版本的tutorial下,执行./sample9_curl.t www.winiis.com 2 时,发生coredump image image

hbt19860104 commented 5 years ago

如果协程数是1的话,不会core

hbt19860104 commented 5 years ago

image

yyzybb537 commented 5 years ago

我试了一下 未能复现。。。

hbt19860104 commented 5 years ago

我把这个可执行程序拷贝到别的机器运行,也不会出现这个问题,奇怪了。

yyzybb537 commented 5 years ago

那估计是和你的libcurl.so有关系

hbt19860104 commented 5 years ago

我试了下,在另一个环境,libcurl是一样的,没有出问题。 我回想了一下,最早,我在centos7的虚拟机上编译libgo,记得那时候有跑了下这个测试程序,好像没有出问题(不是很确定,不知道当时跑的时间是否足够长)。那时候因为我的boost是用yum安装的,只有共享库,所以我之前编译把boost.cmake的Boost_USE_STATIC_LIBS等变量置为FALSE才通过编译的。后来我把boost的库删掉,用源码编译了boost,然后把Boost_USE_STATIC_LIBS等变量改为TRUE,libgo再重新编译,然后就有问题了。我不确定就是我以上描述的操作导致会出问题,希望大神能看出点原因。

yyzybb537 commented 5 years ago

新版的libgo不依赖boost库了 tutorial程序才依赖 boost建议还是下载一个70MB左右的源码包 从源码编译来安装

hbt19860104 commented 5 years ago

我想请教个问题下,我们这个libgo应该是通过hook一些系统调用(如poll,select,read,write等),那这个hook是系统级的,还是应用级的。如果是系统级的,是不是会导致系统其他的应用在调用 这些系统调用的时候受影响?如果有关于这方面的材料能否发些给我?非常感谢!

yyzybb537 commented 5 years ago

hook生效范围是“进程内”

yyzybb537 commented 5 years ago

动态加载(dlopen)的module(so)不会被hook

hbt19860104 commented 5 years ago

多谢大神。回到刚开始我提的问题,因为一个协程不会core,所以我想可能还是libgo本身 的问题,有空帮我想下什么原因哈。

yyzybb537 commented 5 years ago

libgo是静态链接到进程里的, 你换台机器就没问题了,换的其实是动态链接的那些库(ldd)

hbt19860104 commented 5 years ago

多谢大神指教,还真的是libcurl的问题。我系统装了两个libcurl,一个是通过yum装的,另一个可能是通过源码装的。估计是链接时使用的库,和运行时使用的库不同一个,导致的问题。多谢多谢!

yyzybb537 commented 5 years ago

嗯 这是一个常见问题