react-native - 使用 Hermes 的 React native 应用程序崩溃并显示

在我们的崩溃跟踪应用程序 bugsnag 中,我看到越来越多的崩溃与“SIGSEGV:分段违规(无效内存引用)”。它们似乎只发生在 Android 上,堆栈跟踪充满了 libhermes.so。

这个堆栈跟踪没有告诉我任何信息,而且我还没有发现任何存在相同问题的问题。有谁知道在哪里寻找根本原因? hermes 变成 SIGSEGV 是 javascript 错误吗?爱马仕的bug?我们使用的其中一个库发生崩溃?

其中一次崩溃的堆栈跟踪。

SIGSEGV Segmentation violation (invalid memory reference) 
    /data/app/com.wolt.courierapp-poHmOlYLJ3-nWo0m_w4kVw==/lib/arm64/libhermes.so:116080 facebook::hermes::detail::hermesFatalErrorHandler(void*, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, bool)
    /data/app/.../lib/arm64/libhermes.so:1222852 0x701af048c4
    /data/app/.../lib/arm64/libhermes.so:1222588 0x701af047bc
    /data/app/.../lib/arm64/libhermes.so:1056428 0x701aedbeac
    /data/app/.../lib/arm64/libhermes.so:182328 0x701ae06838
    /data/app/.../lib/arm64/libhermes.so:523104 0x701ae59b60
    /data/app/.../lib/arm64/libhermes.so:298092 0x701ae22c6c
    /data/app/.../lib/arm64/libhermes.so:564832 0x701ae63e60
    /data/app/.../lib/arm64/libhermes.so:216036 0x701ae0ebe4
    /data/app/.../lib/arm64/libhermes.so:568480 0x701ae64ca0
    /data/app/.../lib/arm64/libhermes.so:578128 0x701ae67250
    /data/app/.../lib/arm64/libhermes.so:544160 0x701ae5eda0
    /data/app/.../lib/arm64/libhermes.so:539976 0x701ae5dd48
    /data/app/.../lib/arm64/libhermes.so:662544 0x701ae7bc10
    /data/app/.../lib/arm64/libhermes.so:723864 0x701ae8ab98
    /data/app/.../lib/arm64/libhermes.so:724172 0x701ae8accc
    /data/app/.../lib/arm64/libhermes.so:724136 0x701ae8aca8
    /data/app/.../lib/arm64/libhermes.so:645300 0x701ae778b4
    /data/app/.../lib/arm64/libhermes.so:543328 0x701ae5ea60
    /data/app/.../lib/arm64/libhermes.so:581332 0x701ae67ed4
    /data/app/.../lib/arm64/libhermes.so:544160 0x701ae5eda0
    /data/app/.../lib/arm64/libhermes.so:541776 0x701ae5e450
    /data/app/.../lib/arm64/libhermes.so:581364 0x701ae67ef4
    /data/app/.../lib/arm64/libhermes.so:544160 0x701ae5eda0
    /data/app/.../lib/arm64/libhermes.so:541776 0x701ae5e450
    /data/app/.../lib/arm64/libhermes.so:581364 0x701ae67ef4
    /data/app/.../lib/arm64/libhermes.so:544160 0x701ae5eda0
    /data/app/.../lib/arm64/libhermes.so:541776 0x701ae5e450
    /data/app/.../lib/arm64/libhermes.so:581364 0x701ae67ef4
    /data/app/.../lib/arm64/libhermes.so:544160 0x701ae5eda0
    /data/app/.../lib/arm64/libhermes.so:413044 0x701ae3ed74
    /data/app/.../lib/arm64/libhermes.so:543328 0x701ae5ea60
    /data/app/.../lib/arm64/libhermes.so:581332 0x701ae67ed4
    /data/app/.../lib/arm64/libhermes.so:544160 0x701ae5eda0
    /data/app/.../lib/arm64/libhermes.so:413044 0x701ae3ed74
    /data/app/.../lib/arm64/libhermes.so:543328 0x701ae5ea60
    /data/app/.../lib/arm64/libhermes.so:581332 0x701ae67ed4
    /data/app/.../lib/arm64/libhermes.so:544160 0x701ae5eda0
    /data/app/.../lib/arm64/libhermes.so:541776 0x701ae5e450
    /data/app/.../lib/arm64/libhermes.so:581364 0x701ae67ef4
    /data/app/.../lib/arm64/libhermes.so:544160 0x701ae5eda0
    /data/app/.../lib/arm64/libhermes.so:541776 0x701ae5e450
    /data/app/.../lib/arm64/libhermes.so:581364 0x701ae67ef4
    /data/app/.../lib/arm64/libhermes.so:544160 0x701ae5eda0
    /data/app/.../lib/arm64/libhermes.so:541776 0x701ae5e450
    /data/app/.../lib/arm64/libhermes.so:147152 facebook::hermes::HermesRuntimeImpl::call(facebook::jsi::Function const&, facebook::jsi::Value const&, facebook::jsi::Value const*, unsigned long)
    /data/app/.../lib/arm64/libhermes-executor-release.so:173936 facebook::jsi::Value facebook::jsi::Function::call<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, facebook::jsi::Value>(facebook::jsi::Runtime&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, facebook::jsi::Value&&) const
    /data/app/.../lib/arm64/libhermes-executor-release.so:173516 0x701a4765cc
    /data/app/.../lib/arm64/libhermes-executor-release.so:154820 void std::__ndk1::__invoke_void_return_wrapper<void>::__call<void (*&)(std::__ndk1::function<void ()> const&, std::__ndk1::function<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > ()>), std::__ndk1::function<void ()> const&, std::__ndk1::function<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > ()> >(void (*&)(std::__ndk1::function<void ()> const&, std::__ndk1::function<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > ()>), std::__ndk1::function<void ()> const&, std::__ndk1::function<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > ()>&&)
    /data/app/.../lib/arm64/libhermes-executor-release.so:164992 facebook::react::JSIExecutor::callFunction(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, folly::dynamic const&)
    /data/app/.../lib/arm64/libreactnativejni.so:683496 0x701a639de8
    /data/app/.../lib/arm64/libreactnativejni.so:688656 0x701a63b210
    /data/app/.../lib/arm64/libreactnativejni.so:439588 0x701a5fe524
    /data/app/.../lib/arm64/libreactnativejni.so:372684 facebook::jni::detail::MethodWrapper<void (facebook::react::JNativeRunnable::*)(), &facebook::react::JNativeRunnable::run, facebook::react::JNativeRunnable, void>::dispatch(facebook::jni::alias_ref<facebook::jni::detail::JTypeFor<facebook::jni::HybridClass<facebook::react::JNativeRunnable, facebook::react::Runnable>::JavaPart, facebook::react::Runnable, void>::_javaobject*>)
    /data/app/.../lib/arm64/libreactnativejni.so:372552 
    unknown 0x3850766e45494e4a```

最佳答案

Hermes 是您“可以”使用的 ReactNative 的新 JavaScript 引擎。

如果你不想使用它,你必须像这里描述的那样做一些配置步骤:https://reactnative.dev/docs/hermes

如果您的应用程序中启用了 Hermes,您可以检查您的 android/app/build.gradle 文件。 如果是,请注意,hermes 不支持“android-bundles”,而只支持 apk-Packages。

也许(我只是猜测)您之前还激活了 hermes,但现在从 APK 切换到 Android-Bundles。

顺便说一句: 您是否使用 logcat 获取堆栈跟踪?如果没有,请试一试。大多数情况下,它会在设备屏幕的 App-Stacktraces 中显示您不会看到的错误消息。

关于react-native - 使用 Hermes 的 React native 应用程序崩溃并显示 "SIGSEGV: Segmentation violation (invalid memory reference) ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60886903/

相关文章:

angular - self 未在 ionic Angular 服务器端渲染中定义

python - 如何在请求中流式传输文件?

swift - 分段选择器移除了可访问性

kotlin - 使用 Kotlinx 在 Ktor 中为按钮添加 onClick

django - 无法在 nginx docker 容器上使用 http2

reactjs - 相对于箭头键旋转图像 react js

angular - 类型 'arrayBuffer' 上不存在属性 'File'

reactjs - AWS 放大自定义问候语

r - 为什么 clogit 和 bife 函数(均在 R 中)的结果不同?

node.js - Nodejs 等待不等待