求问如果是v8引擎引起的crash,如何跟进堆栈调试,定位问题?

1.背景:最近在做cocos2.4版本的v8引擎升级,升级后,发现在运行我们线上游戏会偶现crash。我们使用addr2line的工具发现定位不到源码。
2.问题
2.1想问下官方是如何调试定位由v8crash导致的问题?
2.2想问下3.8版本用v8源码编译v8静态库的参数都有哪些?


@dumganhar

有一种可能,你的so没有调试信息

你可以使用ida逆向反汇编进行定位

image

你是升级到哪个版本?

其实 symbol_level=0 这个基本是 symbol 最低等级,以往经验看,最低等级也会有堆栈,但是可能不是特别准确。

如果你要完全开启,可以设置为 symbol_level=2 。

v8从8.0.4升级到11.6.189.22

你们平时v8的crash问题是如何调试的呀

有可能v8静态库没有带符号表。我研究下用ida逆向看看

v8 的稳定性还是很好的。基本上很少情况要去调试 v8。

如果确实要单步调试,你可以编译 v8 的时候,再配置 is_debug=true,同时改 symbol_level=2 ,把生成的 .a 替换到引擎 external 下。然后就可以在 android studio/ xcode / vs 中单步进入 v8 的 API 进行调试了。

2赞

求问这种木有基地址+偏移量,然后用addr2line也还原不了的,可以用ida逆向定位吗,tomestone存储的日志里感觉也少了一些信息,比如出错的内存地址 @dumganhar @xu_yanfeng 或者可以建议下怎么排查这种类型的crash

cocos经验分享1:Android排查游戏崩溃的8种办法 参考这个帖子,我给出了很多种办法,如果仍旧解决不了,欢迎投喂

好的,我看 tombstone还是定位不到源码,只能试一下IDA了。谢谢

@dumganhar 我发现升级v8后,勾选了场景的autorelease的话,来回切换场景就回复现这个crash,堆栈可以对应的上,想问下是不是和gc有关系,这部分逻辑是在引擎哪里呀,我想按着这个方向排插一下

场景切换的时候,这里会处理资源的自动释放。

我最近也在升级 v8,跑起来了,但是还没上线测试,可以一起交流一下 wx:yanjifa2013

二分改代码法定位

可以复现crash问题了,就是勾选场景的自动释放资源,并且每个场景都有spine动画,切换场景的时候就会稳定复现crash。。debug断点是定位到了https://github.com/cocos/engine-native/blob/1da7b9c0821be9a3f135225c1771cb6b17a2ca0b/cocos/scripting/js-bindings/jswrapper/v8/Object.cpp#L562这个函数。这里可以提供下排查思路吗?

1赞
  1. 2.x具体哪个版本出现的问题呢?
  2. 可以的话,请提供可复现demo

我们是用2.4.7的版本,在这个版本中升级了v8,v8的版本和官方3.8的保持一致,升级后发现这个场景有crash问题。

2.4.13 有修复类似问题,麻烦参考该PR修改
验证后,麻烦回复下结论,若有问题,麻烦上传可复现demo,谢谢

试了一下,还是会crash。晚点我整理个demo传一下。

这个demo会升级v8引擎,我单独搞一个引擎分支和可以复现crash的demo?然后官方帮忙定位一下 吗