有一定概率在对话时崩溃
问题描述
在使用某个 APP 时,选择 QNN reasoning model 和预设角色进行聊天,有一定概率会崩溃。崩溃时会出现 SIGSEGV 错误,提示程序访问了无效的内存地址。
reproducing步骤
- 启动 APP
- 选择 QNN reasoning model
- 选择预设角色进行聊天
- 有一定概率崩溃
错误日志
I/flutter (19431): 💬 Call LLM done (chat mode)
I/flutter (19431): 💬 _$Chat._onStreamEvent content: <think>Okay, I need to create a regex generator that matches an email address. Let me think about how to approach this.
I/flutter (19431): First, I should probably generate the regular expressions based on the given email address. So, I'll start by checking if the email is valid. If it's not, I'll throw an error. Then, I need to match each line in the email with a regular expression.
I/flutter (19431): I remember that regex can be used for pattern matching and pattern matching with regular expressions. For example, using a regular expression like "^[a-zA-Z0-9]+{{content}}quot; would match any text within the range of 0 to 9 characters. But since we're looking for a specific email address, maybe using a more specific regex?
I/flutter (19431): Wait, but the user provided an email address as an input. Maybe they want me to generate all possible matches for that email without any restrictions? Or perhaps they want me to generate all possible matches without any restrictions? Hmm, maybe both are acceptable. Let me check the problem statement again
I/libc (19431): handling signal: 11
F/libc (19431): Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x6172656e6567225b in tid 19431 (m.rwkvzone.chat), pid 19431 (m.rwkvzone.chat)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'Xiaomi/houji/houji:15/AQ3A.240627.003/OS2.0.101.0.VNCCNXM:user/release-keys'
Revision: '0'
ABI: 'arm64'
Timestamp: 2025-03-10 12:47:49.517213795+0800
Process uptime: 3440s
Cmdline: com.rwkvzone.chat
pid: 19431, tid: 19431, name: m.rwkvzone.chat >>> com.rwkvzone.chat <<<
uid: 10656
tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
pac_enabled_keys: 000000000000000f (PR_PAC_APIAKEY, PR_PAC_APIBKEY, PR_PAC_APDAKEY, PR_PAC_APDBKEY)
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x6172656e6567225b
x0 b40000713d8f6c30 x1 61707320656c676e x2 0000007ffcb6dcc0 x3 b40000703e1dca90
x4 b40000703e20a810 x5 0000006d07052449 x6 0000006d00a06921 x7 0000000000000000
x8 6172656e6567206f x9 7461687420726f66 x10 b40000713d8f6c70 x11 b40000713d8f6c50
x12 0000000000098a4a x13 0000000000200000 x14 bacff0e21ca2f0d7 x15 0000007ffcb6dda0
x16 0000000000000000 x17 b40000719d9ed3d0 x18 0000007276f94000 x19 0000007ffcb6dcc0
x20 b40000713d8f6c30 x21 0000000000000000 x22 00000072761f6a00 x23 0000006f1a6f5428
x24 0000006d00008081 x25 0000007ffc394000 x26 b40000719d9ecbf0 x27 0000006d098847c0
x28 000000080000006d x29 0000007ffcb6ddb8
lr 0000006f1a633638 sp 0000007ffcb6dc10 pc 0000006f1a633728 pst 0000000040001000
5 total frames
backtrace:
#00 pc 00000000020a6728 /data/app/~~dWq9FMQu8ACWIeY5JP7YEw==/com.rwkvzone.chat-WXNYpc9_GH7tC0EgAO1Mbg==/lib/arm64/libflutter.so (BuildId: 5bfe9454278b7052e681228378cf149d6155a6dc)
#01 pc 00000000020a6634 /data/app/~~dWq9FMQu8ACWIeY5JP7YEw==/com.rwkvzone.chat-WXNYpc9_GH7tC0EgAO1Mbg==/lib/arm64/libflutter.so (BuildId: 5bfe9454278b7052e681228378cf149d6155a6dc)
#02 pc 00000000020a1790 /data/app/~~dWq9FMQu8ACWIeY5JP7YEw==/com.rwkvzone.chat-WXNYpc9_GH7tC0EgAO1Mbg==/lib/arm64/libflutter.so (BuildId: 5bfe9454278b7052e681228378cf149d6155a6dc)
#03 pc 000000000203ad10 /data/app/~~dWq9FMQu8ACWIeY5JP7YEw==/com.rwkvzone.chat-WXNYpc9_GH7tC0EgAO1Mbg==/lib/arm64/libflutter.so (BuildId: 5bfe9454278b7052e681228378cf149d6155a6dc)
#04 pc 0000000000008184 [anon:dart-code]
Lost connection to device.
Exited.
分析
根据错误日志,我们可以看到程序在执行某个函数时,访问了无效的内存地址,导致了 SIGSEGV 错误。具体来说,程序在执行 libflutter.so
文件中的某个函数时,访问了地址 0x6172656e6567225b
,这个地址是无效的。
解决方案
为了解决这个问题,我们需要找到导致 SIGSEGV 错误的原因,并修复它。具体来说,我们需要检查 libflutter.so
文件中的代码,找到访问无效内存地址的函数,并修复它。
后续步骤
- 检查
libflutter.so
文件中的代码,找到访问无效内存地址的函数。 - 修复该函数,确保它不访问无效的内存地址。
- 测试程序,确保它不再崩溃。
提交
此 bug 已经上报给 @MollySophia , 在此作为记录。
问题 1:什么是 QNN reasoning model?
答案:QNN reasoning model 是一种 AI 模型,用于进行推理和决策。它可以帮助程序理解和处理复杂的信息。
问题 2:为什么会出现崩溃问题?
答案:崩溃问题可能是由于程序访问了无效的内存地址,导致了 SIGSEGV 错误。具体来说,程序在执行某个函数时,访问了无效的内存地址。
问题 3:如何修复崩溃问题?
答案:修复崩溃问题需要找到导致 SIGSEGV 错误的原因,并修复它。具体来说,我们需要检查 libflutter.so
文件中的代码,找到访问无效内存地址的函数,并修复它。
问题 4:如何测试程序?
答案:测试程序需要确保它不再崩溃。具体来说,我们需要测试程序的所有功能,确保它们正常工作。
问题 5:如何提交 bug?
答案:提交 bug 需要上报给相关人员,例如 @MollySophia。具体来说,我们需要提供 bug 的详细信息,包括错误日志和修复方案。
问题 6:什么是 SIGSEGV 错误?
答案:SIGSEGV 错误是指程序访问了无效的内存地址,导致了崩溃。具体来说,程序在执行某个函数时,访问了无效的内存地址。
问题 7:如何避免崩溃问题?
答案:避免崩溃问题需要确保程序正常工作。具体来说,我们需要测试程序的所有功能,确保它们正常工作,��修复任何错误。
问题 8:什么是 libflutter.so 文件?
答案:libflutter.so 文件是程序的动态链接库。具体来说,它包含了程序的函数和变量。
问题 9:如何修复 libflutter.so 文件中的错误?
答案:修复 libflutter.so 文件中的错误需要找到导致错误的原因,并修复它。具体来说,���们需要检查 libflutter.so 文件中的代码,找到错误的函数或变量,并修复它。
问题 10:如何测试 libflutter.so 文件?
答案:测试 libflutter.so 文件需要确保它正常工作。具体来说,我们需要测试 libflutter.so 文件中的所有函数和变量,确保它们正常工作。
问题 11:什么是 QNN reasoning model 的优点?
答案:QNN reasoning model 的优点包括其能够进行推理和决策,帮助程序理解和处理复杂的信息。
问题 12:什么是 QNN reasoning model 的缺点?
答案:QNN reasoning model 的缺点包括其可能会出现崩溃问题,导致程序不正常工作。
问题 13:如何选择 QNN reasoning model?
答案:选择 QNN reasoning model 需要考虑其优点和缺点。具体来说,我们需要评估 QNN reasoning model 的性能和稳定性。
问题 14:如何使用 QNN reasoning model?
答案:使用 QNN reasoning model 需要了解其原理和接口。具体来说,我们需要学习 QNN reasoning model 的 API 和接口。
问题 15:什么是 QNN reasoning model 的应用场景?
答案:QNN reasoning model 的应用场景包括其用于进行推理和决策,帮助程序理解和处理复杂的信息。