mars icon indicating copy to clipboard operation
mars copied to clipboard

mars crash 求解

Open GeekerHuang opened this issue 5 years ago • 16 comments

void mars_boost::signals2::detail::signal1_impl<void, bool, mars_boost::signals2::optional_last_value, int, std::__1::less, mars_boost::function<void (bool)>, mars_boost::function<void (mars_boost::signals2::connection const&, bool)>, mars_boost::signals2::mutex>::do_disconnect<mars_boost::_bi::bind_t<void, mars_boost::_mfi::mf1<void, mars::stn::NetCore, bool>, mars_boost::_bi::list2<mars_boost::_bi::valuemars::stn::NetCore*, mars_boost::arg<1> > > >(mars_boost::_bi::bind_t<void, mars_boost::_mfi::mf1<void, mars::stn::NetCore, bool>, mars_boost::bi::list2<mars_boost::bi::valuemars::stn::NetCore*, mars_boost::arg<1> > > const&, mpl::bool) (in LINK) (signal_template.hpp:523)

1 | LINK | void mars_boost::signals2::detail::signal1_impl<void, bool, mars_boost::signals2::optional_last_value, int, std::__1::less, mars_boost::function<void (bool)>, mars_boost::function<void (mars_boost::signals2::connection const&, bool)>, mars_boost::signals2::mutex>::do_disconnect<mars_boost::_bi::bind_t<void, mars_boost::_mfi::mf1<void, mars::stn::NetCore, bool>, mars_boost::_bi::list2<mars_boost::_bi::valuemars::stn::NetCore*, mars_boost::arg<1> > > >(mars_boost::_bi::bind_t<void, mars_boost::_mfi::mf1<void, mars::stn::NetCore, bool>, mars_boost::bi::list2<mars_boost::bi::valuemars::stn::NetCore*, mars_boost::arg<1> > > const&, mpl::bool) (in LINK) (signal_template.hpp:523) 2 | LINK | mars::stn::NetCore::~NetCore() (in LINK) (net_core.cc:209) 3 | LINK | mars::stn::NetCore::~NetCore() (in LINK) (net_core.cc:206) 4 | LINK | MessageQueue::__AsyncInvokeHandler(MessageQueue::MessagePost_t const&, MessageQueue::Message&) (in LINK) (message_queue.cc:670) 5 | LINK | MessageQueue::RunLoop::Run() (in LINK) (message_queue.cc:869) 6 | LINK | MessageQueue::MessageQueueCreater::__ThreadRunloop() (in LINK) (message_queue.cc:915) 7 | LINK | Thread::start_routine(void*) (in LINK) (thread.h:412) 8 | libsystem_pthread.dylib | _pthread_body (in libsystem_pthread.dylib) + 128 9 | libsystem_pthread.dylib | _pthread_start (in libsystem_pthread.dylib) + 44

GeekerHuang avatar May 06 '19 07:05 GeekerHuang

这里要结合日志,和你使用的生命周期来分析。是在析构的时候 crash 的

garryyan avatar May 14 '19 09:05 garryyan

好的 我看一下代码

GeekerHuang avatar May 17 '19 07:05 GeekerHuang

Attempted to dereference garbage pointer 0x18. Originated at or in a subcall of __xlogger_Assert_impl

这里要结合日志,和你使用的生命周期来分析。是在析构的时候 crash 的

Attempted to dereference garbage pointer 0x18. Originated at or in a subcall of __xlogger_Assert_impl

GeekerHuang avatar May 20 '19 02:05 GeekerHuang

这里要结合日志,和你使用的生命周期来分析。是在析构的时候 crash 的 我应该怎么查这个 crash 呢

GeekerHuang avatar May 20 '19 02:05 GeekerHuang

中断言了?

使用的 mars 是 debug 版本还是 release 版本?

garryyan avatar May 22 '19 06:05 garryyan

版本

怎么确认是debug 版本还是release 版本

GeekerHuang avatar May 22 '19 11:05 GeekerHuang

中断言了?

使用的 mars 是 debug 版本还是 release 版本?

在没

GeekerHuang avatar May 23 '19 02:05 GeekerHuang

@garryyan framework的制作是使用说明文档的方式得来的: 1、下载V1.3.0release版本的包 2、执行python build_ios.py 如何确定编译出的mars包是debug还是release环境的包呢,在源码中添加输出能得到Framework环境的相关信息吗?如果可以的话,在哪个文件的什么地方注入可以完成这样的信息确定呢?有劳帮忙解决一下

另一个问题,如果命中断言,能确定是什么因素导致的吗? 我们在使用的时候可以规避一下

chieryw avatar May 23 '19 13:05 chieryw

方便的话,留个微信联系方式,我加您

chieryw avatar May 23 '19 13:05 chieryw

执行脚本编译的都是 release 包。这种 crash 绝大多数要结合程序行为来分析的,程序行为在日志里。所以只放堆栈,我这里也帮不上忙的。

garryyan avatar May 30 '19 02:05 garryyan

@garryyan @GeekerHuang 我这边也遇到这个crash了,重现的方法是: 启动APP,用iOS系统上滑杀掉APP的方法杀掉APP

我跟踪了一下代码,是因为NetCore析构的时候调用了ActiveLogic的方法。

NetCore::~NetCore() {
    xinfo_function();
    ActiveLogic::Singleton::Instance()->SignalActive.disconnect(boost::bind(&NetCore::__OnSignalActive, this, _1));

而ActiveLogic已经在NetCore析构之前就析构完毕了(都是全局的单例,析构顺序没有定义)。 那些最终显示的崩溃堆栈其实都是因为ActiveLogic已经是个野指针了。

dourgulf avatar Nov 18 '19 08:11 dourgulf

我目前有一个解决办法,让NetCore(其实是NetSource类)持有ActiveLogic的智能指针。 这样能保证ActiveLogic在NetCore析构之后才析构。

dourgulf avatar Nov 18 '19 08:11 dourgulf

我目前有一个解决办法,让NetCore(其实是NetSource类)持有ActiveLogic的智能指针。 这样能保证ActiveLogic在NetCore析构之后才析构。

这样处理之后 此类crash还出现吗?

chinaspx avatar Jan 05 '21 09:01 chinaspx

@dourgulf 可以留个联系方式,告诉下具体怎么解决这个crash的吗

WhoMovedMyWord avatar Mar 31 '21 10:03 WhoMovedMyWord

后来还是直接改成不释放ActiveLogic了,因为实在是太多互相依赖的关系了。 这样改: class ActiveLogic { public: // 有很多依赖这个对象生命周期的全局对象,不做析构处理了 SINGLETON_INTRUSIVE(ActiveLogic, new ActiveLogic, [](ActiveLogic *){});

dourgulf avatar Jul 27 '21 09:07 dourgulf

后来还是直接改成不释放ActiveLogic了,因为实在是太多互相依赖的关系了。 这样改: class ActiveLogic { public: // 有很多依赖这个对象生命周期的全局对象,不做析构处理了 SINGLETON_INTRUSIVE(ActiveLogic, new ActiveLogic, [](ActiveLogic *){});

解决了?不会有崩溃了吗?

hnny09 avatar Jan 09 '23 06:01 hnny09