js一处错误导致整个应用死掉

大家都怎么解决的这个问题,当然有些人说代码要写好,你既然这么说我就不讨论了
想象一个场景,由于种种原因,你热更新一个版本,结果就因为不起眼的地方导致出错,而这个错误只是用户点了一个对整个游戏根本没有逻辑影响的一个地方,也就是这个出错根本不会影响到整个游戏的运行,而就是这个错误导致玩家只能把应用关了再重新进来才有用(用户:什么垃圾游戏,不玩了),这样容易导致很多用户的流失(你可以说要测试好才上线之类的,那你可以退出这个主题了)。我看到很多游戏比如就算出错了,也最多弹出一个框框弹出出错代码然后还有上传bug之类的,把这个框框关了可以继续玩游戏(当然再次手贱点出错的地方我们略过),因为正常热更新一般不会更新游戏的主逻辑,所以出点小错误大家也能接收,但是不能接收直接死机了,只能大退重进。
那么大神们怎么处理这种问题的(对js高级的东东基本不会,所以发帖问哈大神们)

1赞

try{
}catch(e){
}

问题是try catch写在哪里?不能要求每个函数都写一个try catch吧

通常只有JSON.parse会出错,其他问题应该自己解决

你看到人家就算出错了也最多弹出一个框框
殊不知,人家弹框框,说明自己把错误处理好了。人家背后付出的是写代码目的明确,review严格执行,认真仔细测试,小范围灰度发布,制定回退方案,所以才会表现好一点

你如果是那种写代码时东一个新功能,西一个逻辑优化,漫无目的,写完之后简单冒烟测试就丢上线,那被用户骂辣鸡游戏不是很合理的一件事情么

这种东西是一分耕耘一分收获的,项目野蛮生长期都是bug很多的,用户量上来了赶紧优化,哪怕一个人开发也得走走流程嘛,不然你一次发布,一次数据库操作,都影响着上万活跃的流失与否,甚至影响游戏成败,你的手不会抖么,你睡觉不会心慌慌么

认同

崩溃很难避免,原生发布很难判断哪部分代码和c++之间有交互

也不建议大面积的try catch或容错,会隐蔽会发生问题的地方

要避免这个问题本质上还需投入成本和心思,没有什么捷径可走

楼上讨论的是上线前的逻辑,楼主说的应该是上线后的事。
首先,是不是有没有bug的产品,如果有,那楼上说的也没啥问题,如果没有:
是不是系统一个bug就重启
是不是应用一个bug就闪退

如果应该如此,请插上数据线,看看各种爆红

PS:另外还要加上一句,通常而言,越大的系统,是bug更多了还是更少

都快变成日更贴了 一旦代码写错了,就会每秒60个左右地在不停报错,导致浏览器卡死,引擎那边报错不能优化下吗

对的,就是上线后的问题,因为之前看到过cocos2dx-lua处理错误,感觉那种处理方式很好。就一个简单的如果后端由于某种原因导致比如返回的有的用户信息里面突然是null(当然这只是个比喻),而js这边当做字符串处理然后报错导致卡死,这样很丢失用户的,一般这种突然出现的bug大都不影响整个游戏的主逻辑的,其实可以忽略掉的,我想知道大家一般都怎么处理这种问题的,这种突然造成的能不能像lua那边处理成比如用户上传bug之类的后续继续运行下去,这样用户一般都不会丢失(其实对lua和js都不精通只是了解,之前一直做后端的,只是看到一个lua处理的效果都没去看具体实现的过程)。当然你们说写得不健全之类的就当我没发这个帖子。我想问的是js是不是根本就不能很好的处理好这种问题,还是有好的处理方式我不知道

终于有人讨论这个问题了,这个问题我真的无力吐槽,我都不知道你们是怎么敢拿来做中大型游戏的,一个JS 错误就不停的报错把游戏卡死直接崩溃,真是绝了。我是在代码上多加if 和 try来避免可能出现的错误,尽量不影响游戏过程

mark!!! :joy:

程序写健壮一些就行了

没那么简单,比如服务器发来的数据,不可能每个数据都去判非法值吧;
一般也就是开发和测试阶段,发现哪个值可能是非法的,加个判定;
实际上线后,服务器发了一个非法值,就可能崩了,

服务器要加错误吗啊 服务器错误吗不为0的情况再去处理一般不会出问 幺儿子

咋骂人呢,
错误码也是已知情况下才会加,我们这里讨论的未知情况下错误导致的崩溃;
你能把所有情况都考虑到,然后加上错误码么

有专门的测试,上线前测试,一般容易触发的小j8问题全给你找出来,你都觉得烦 :sunglasses:

然后台也能看某个版本崩溃率 一般低于0.1% 好像老版不追究,否则自己加班慢慢测着改吧

我的是2.4版本,所有脚本都继承一个基类,然后在基类里面把onLoad之类的声明周期函数都替换了,然后把schedule、action回调也替换了

schedule和tween里面故意写一个报错代码会导致程序卡死。
我觉得程序是应该健壮,尽量保证没有报错,没有bug,但可能因为种种因素,程序会出现莫名其妙的、不可预知的问题,尤其是中大型游戏。如果因为一个小小的问题导致程序崩溃(纯C++等语言除外)就让人接受不了了。

我想问的是,大家有没有一种很好的处理方式,比如主逻辑这块肯定不能出问题,但是到某一程度后增加了某个功能,而这个功能可能导致程序蹦掉,那么这个时候如果可以搞个比如用户提交bug之类的,这样用户基本不会流失,不要一些没测出来的小问题导致程序崩掉了我们开发者的都不知道。当然游戏写得很健全也不会出现问题,但是这样就对初学者很不友好,你不能要求只要做游戏个个都是大神,毕竟很多所谓的健全是要试错才知道的

这些东西用不着你自己做 所有的错误后台收集就是了