mars
mars copied to clipboard
mars crash 求解
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
这里要结合日志,和你使用的生命周期来分析。是在析构的时候 crash 的
好的 我看一下代码
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
这里要结合日志,和你使用的生命周期来分析。是在析构的时候 crash 的 我应该怎么查这个 crash 呢
中断言了?
使用的 mars 是 debug 版本还是 release 版本?
版本
怎么确认是debug 版本还是release 版本
中断言了?
使用的 mars 是 debug 版本还是 release 版本?
在没
@garryyan framework的制作是使用说明文档的方式得来的: 1、下载V1.3.0release版本的包 2、执行python build_ios.py 如何确定编译出的mars包是debug还是release环境的包呢,在源码中添加输出能得到Framework环境的相关信息吗?如果可以的话,在哪个文件的什么地方注入可以完成这样的信息确定呢?有劳帮忙解决一下
另一个问题,如果命中断言,能确定是什么因素导致的吗? 我们在使用的时候可以规避一下
方便的话,留个微信联系方式,我加您
执行脚本编译的都是 release 包。这种 crash 绝大多数要结合程序行为来分析的,程序行为在日志里。所以只放堆栈,我这里也帮不上忙的。
@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已经是个野指针了。
我目前有一个解决办法,让NetCore(其实是NetSource类)持有ActiveLogic的智能指针。 这样能保证ActiveLogic在NetCore析构之后才析构。
我目前有一个解决办法,让NetCore(其实是NetSource类)持有ActiveLogic的智能指针。 这样能保证ActiveLogic在NetCore析构之后才析构。
这样处理之后 此类crash还出现吗?
@dourgulf 可以留个联系方式,告诉下具体怎么解决这个crash的吗
后来还是直接改成不释放ActiveLogic了,因为实在是太多互相依赖的关系了。 这样改: class ActiveLogic { public: // 有很多依赖这个对象生命周期的全局对象,不做析构处理了 SINGLETON_INTRUSIVE(ActiveLogic, new ActiveLogic, [](ActiveLogic *){});
后来还是直接改成不释放ActiveLogic了,因为实在是太多互相依赖的关系了。 这样改: class ActiveLogic { public: // 有很多依赖这个对象生命周期的全局对象,不做析构处理了 SINGLETON_INTRUSIVE(ActiveLogic, new ActiveLogic, [](ActiveLogic *){});
解决了?不会有崩溃了吗?