Flutter:热重载后“与设备的连接丢失”错误

Mak*_*ren 6 android dart visual-studio-code flutter

这是来自调试控制台的完整错误:

Launching lib\main.dart on Android SDK built for x86 in debug mode...
Built build\app\outputs\apk\debug\app-debug.apk.
I/FlutterActivityDelegate( 4158): onResume setting current activity to this
D/        ( 4158): HostConnection::get() New Host Connection established 0xdc74b680, tid 4178
D/EGL_emulation( 4158): eglMakeCurrent: 0xdc741300: ver 2 0 (tinfo 0xdc74c480)
F/libc    ( 4158): Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xd in tid 4177 (Thread-2), pid 4158 (le.startupnamer)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'google/sdk_gphone_x86/generic_x86:9/PPP4.180612.007/4860066:userdebug/dev-keys'
Revision: '0'
ABI: 'x86'
pid: 4158, tid: 4177, name: Thread-2  >>> com.example.startupnamer <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xd
Cause: null pointer dereference
eax ca0a8aac  ebx ca0a8aac  ecx 0000000a  edx c9046c80
edi de6638d0  esi c90479f8
ebp c9046b58  esp c9046b58  eip c96e31d8
backtrace:
#00 pc 006981d8  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#01 pc 008f5b75  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#02 pc 008e87ea  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#03 pc 008f3ad6  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#04 pc 008e8b2f  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#05 pc 008ffb03  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#06 pc 008eb310  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#07 pc 008f3d98  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#08 pc 008e8b2f  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#09 pc 008eafc8  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#10 pc 008f997f  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#11 pc 008eaff8  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#12 pc 008fc81c  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#13 pc 008eaf69  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#14 pc 008f997f  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#15 pc 008eaff8  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#16 pc 008ef41e  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#17 pc 008f0570  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#18 pc 0091433e  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#19 pc 0092fad4  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#20 pc 00932f2a  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#21 pc 00934573  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#22 pc 00933d2b  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#23 pc 0093004a  /data/app/com.example.startupnamer-Doz3k_Pl0QfJtnmxYqiyHg==/lib/x86/libflutter.so
#24 pc 0000056b  <anonymous:c7680000>
Lost connection to device.
Exited (sigterm)
Run Code Online (Sandbox Code Playgroud)

我将 Visual Studio Code 与 Flutter 扩展一起使用,但没有使用 Dart 扩展。我还尝试在 Android 模拟器上运行我的 Flutter 应用程序,这是一个带有 API 28 x86 的 Nexus 6。模拟性能设置为“硬件 - GLES 2.0”。其余设置保留为默认值。

我在将模拟器与 Flutter 一起使用之前冷启动了模拟器,这是由于 adb 连接问题,如果我正常启动模拟器会阻止模拟器加载。可能不相关,但无论如何都要注意。

flutter doctor -v在命令行中键入将显示以下内容:

[?] Flutter (Channel beta, v0.5.1, on Microsoft Windows [Version 10.0.17134.112], locale en-AU)
    • Flutter version 0.5.1 at C:\dev\flutter
    • Framework revision c7ea3ca377 (6 weeks ago), 2018-05-29 21:07:33 +0200
    • Engine revision 1ed25ca7b7
    • Dart version 2.0.0-dev.58.0.flutter-f981f09760

[?] Android toolchain - develop for Android devices (Android SDK 28.0.1)
    • Android SDK at C:\Android\android-sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.1
    • ANDROID_HOME = C:\Android\android-sdk
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)
    • All Android licenses accepted.

[?] Android Studio (version 3.1)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 26.0.1
    • Dart plugin version 173.4700
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)

[?] IntelliJ IDEA Community Edition (version 2018.1)
    • IntelliJ at C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.1.2
    • Flutter plugin version 26.0.2
    • Dart plugin version 181.4668.60

[!] VS Code, 64-bit edition (version 1.25.0)
    • VS Code at C:\Program Files\Microsoft VS Code
    • Flutter extension not installed; install from
      https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[!] Connected devices
    ! No devices available

! Doctor found issues in 2 categories.
Run Code Online (Sandbox Code Playgroud)

现在针对实际问题:

当我加载 Flutter 应用程序时,无论代码处于何种状态,应用程序都会从​​创建后第一次保存时的状态启动。如果我尝试对代码进行任何更改(我只是更改主题颜色)并尝试热重载,应用程序会因我上面发布的错误而崩溃。为什么会发生这种情况,我该怎么做才能解决这个问题?

加载项目时没有错误,或者在不更改代码的情况下热重载时没有错误。

任何帮助表示赞赏。

编辑:我无法使用同一个项目在 Android Studio 中复制此错误。这个错误只出现在我的 Visual Studio Code 中。

Dan*_*eny 0

您发布的第一个错误是崩溃,应该在 GitHub 上提出。应该有某种方法来符号化堆栈跟踪(因此它具有真实的方法名称等),但我找不到它的说明。这可能是与此相同的问题,我不确定。

我使用带有 Flutter 扩展的 Visual Studio Code,但没有 Dart 扩展。

这里与此无关,但仅供参考,Flutter 扩展依赖于 Dart 扩展,因此安装 Flutter 会自动安装 Dart。

当我加载 Flutter 应用程序时,无论代码处于何种状态,应用程序都会从​​创建后第一次保存时的状态启动。

这听起来像这个问题;值得一提的是,您在那里有它来帮助收集信息(我不确定 Flutter 团队中是否有人能够在本地重现它以进行调试)。

编辑:我无法使用同一项目在 Android Studio 中复制此错误。这个错误只出现在我的 Visual Studio Code 中。

两个 IDE 使用相同的工具,因此环境之间可能存在一些细微的差异(例如,我认为大多数人在 IntelliJ/Android Studio 中运行时没有调试器,但在 VS Code 中使用调试器)。您可以相当轻松地在 VS Code 中捕获日志,但我不知道 IntelliJ/Android Studio 是否有类似的内容可供比较。