react-native - 使用 Hermes 的 React native 应用程序崩溃并显示 "SIGSEGV: Segmentation violation (invalid memory reference) "

标签 react-native react-native-hermes

在我们的崩溃跟踪应用程序 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/

相关文章:

javascript - 为什么我的 this.props.navigation.setParams 不起作用?

android - 正在获取 "java.lang.UnsatisfiedLinkError: couldn' t 找到 DSO 以加载 : libhermes. 所以“错误

由于 hermes-debug.aar 引用,gradle bundleDebugAar 步骤失败

react-native - React-native-svg 中 Arc Progress 的圆角

javascript - 无法将没有 Yoganode 的子级添加到父级

ios - 无法在 <Text/> 中创建 <ActivityIndi​​catorIOS/>

按下 returnKeyType 时 react 原生调用 onSubmit()

android - React native 0.61.5 Crashlytics 缺少 libhermes.so : SoLoader. java com.facebook.soloader.SoLoader.assertInitialized

android - SoLoader : couldn't find DSO to load: libjsijniprofiler. 所以引起:dlopen failed: library "libhermes.so"