-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
程序内部core但是core栈不完整 #1997
Comments
这就是完整的core栈。bthread的堆栈就是从bthread_make_fcontext 开始的。 |
这个可能你业务代码抛出了异常,没有catch,异常逃逸到了brpc框架内。本质原因是业务代码的问题,不是brpc的问题。 |
业务代码抛异常为什么会跑到brpc的 SocketDeleter::operator() 函数里呢? |
struct SocketDeleter {
void operator()(Socket* m) const {
DereferenceSocket(m);
}
};
typedef std::unique_ptr<Socket, SocketDeleter> SocketUniquePtr;
因为这个是SocketDeleter的operator(),SocketDeleter是作为unique_ptr的删除器的。会在unique_ptr对象析构的时候调用。而所有析构函数在C++11以后默认是noexcept的。所以当检测到异常的时候,程序立即终止。 前几天我没仔细看这个网友的栈信息。如果是core在SocketDeleter的operator()中,应该是Socket::Dereference这个函数抛出了异常。 LOG(FATAL) << "Invalid SocketId=" << id;
return -1;
}
LOG(FATAL) << "Over dereferenced SocketId=" << id;
老问题。当链接了glog的时候,FATAL级别日志,会触发abort抛出异常,导致core。 请问你们是不是链接了glog? @vinllen |
我们修改了LOG,统一链接用的外部的spdlog |
Is your feature request related to a problem? (你需要的功能是否与某个问题有关?)
目前程序core掉(非brpc问题,是我们程序内部bug),core栈只到brpc,我们用的是brpc+tcmalloc,是否有额外的参数能够看到完整的core栈:
Describe the solution you'd like (描述你期望的解决方法)
同一块代码导致的coredump,有的时候coredump能够打到程序中,有的时候打不出来(只能到brpc层),是否有配置上的建议,使得我们能够打印完整的core栈,已经开启了no-omit-frame-pointer,tcmalloc是链接的gperftools源码。
Describe alternatives you've considered (描述你想到的折衷方案)
Additional context/screenshots (更多上下文/截图)
The text was updated successfully, but these errors were encountered: