Android NDK SIGSEGV 致命信号 11,代码 2 (SEGV_ACCERR)
Android NDK SIGSEGV fatal signal 11, code 2 (SEGV_ACCERR)
我出现了这个错误:
A/libc: Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xf523dffc itd...
在调试器中,我只能收集到以下信息:
<MAIN THREAD>
* frame #0: 0xf00e3a00 libart.so`art_sigsegv_fault
frame #1: 0xf00e3fa4 libart.so`art::FaultManager::HandleFault(int, siginfo*, void*) + 372
frame #2: 0xf00e3ccb libart.so`art::art_fault_handler(int, siginfo*, void*) (.llvm.2308358812779254744) + 43
frame #3: 0x5fd1afe1 app_process32`___lldb_unnamed_symbol25$$app_process32 + 625
frame #4: 0xf17d7180 libc.so`___lldb_unnamed_symbol2$$libc.so + 1
frame #5: 0xc28d951c libnative-lib.so`vcode_synth_frame_rate at vocoder.c:1112
frame #6: 0xc28d77bc libnative-lib.so`vcode_action at vocoder.c:1315
frame #7: 0xc28d951c libnative-lib.so`vcode_synth_frame_rate at vocoder.c:1112
然后,点击显示的“继续执行”按钮:
thread #7, name = 'Signal Catcher', stop reason = breakpoint 15.1
* frame #0: 0xf00e3a00 libart.so`art_sigsegv_fault
frame #1: 0xf00e3fa4 libart.so`art::FaultManager::HandleFault(int, siginfo*, void*) + 372
frame #2: 0xf00e3ccb libart.so`art::art_fault_handler(int, siginfo*, void*) (.llvm.2308358812779254744) + 43
frame #3: 0x5fd1afe1 app_process32`___lldb_unnamed_symbol25$$app_process32 + 625
frame #4: 0xf17d7180 libc.so`___lldb_unnamed_symbol2$$libc.so + 1
frame #5: 0xc28d951c libnative-lib.so`vcode_synth_frame_rate at vocoder.c:1112
frame #6: 0xc28d77bc libnative-lib.so`vcode_action at vocoder.c:1315
frame #7: 0xc28680b3 libnative-lib.so`android_live_render(frames_number=128, ioData=0xc2930004) at app_delegate.c:198
frame #8: 0xc286853b libnative-lib.so`do_stuff at app_delegate.c:265
frame #9: 0xf186c140 libc.so`ru_reseed + 4
frame #10: 0xeff73f21 libart.so
从那里开始,有时它会在函数中显示更多行,但大多数情况下它只会停在函数名称上。
据我了解,SEGV_ACCERR
表示我正在访问一个我不是其所有者的地址。在构建文件中,我有以下内容:
defaultConfig {
...
ndk {
abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
}
}
使用 Android 9. 我不明白问题出在哪里,因为调试器不会证明特定的行,而只会证明函数名称,如回溯中所示。
每个运行都会给出相同的活动地址,0xf523dffc
显然,当指示函数名称时,可能意味着该函数的堆栈溢出。我将 static 关键字添加到 vcode_synth_frame_rate
中的一些数组,然后 SIGSEGV
错误消失了。
这个我还是不太明白,如果谁有更详细的信息请补充回答,我会标记为采纳的回答。
我出现了这个错误:
A/libc: Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xf523dffc itd...
在调试器中,我只能收集到以下信息:
<MAIN THREAD>
* frame #0: 0xf00e3a00 libart.so`art_sigsegv_fault
frame #1: 0xf00e3fa4 libart.so`art::FaultManager::HandleFault(int, siginfo*, void*) + 372
frame #2: 0xf00e3ccb libart.so`art::art_fault_handler(int, siginfo*, void*) (.llvm.2308358812779254744) + 43
frame #3: 0x5fd1afe1 app_process32`___lldb_unnamed_symbol25$$app_process32 + 625
frame #4: 0xf17d7180 libc.so`___lldb_unnamed_symbol2$$libc.so + 1
frame #5: 0xc28d951c libnative-lib.so`vcode_synth_frame_rate at vocoder.c:1112
frame #6: 0xc28d77bc libnative-lib.so`vcode_action at vocoder.c:1315
frame #7: 0xc28d951c libnative-lib.so`vcode_synth_frame_rate at vocoder.c:1112
然后,点击显示的“继续执行”按钮:
thread #7, name = 'Signal Catcher', stop reason = breakpoint 15.1
* frame #0: 0xf00e3a00 libart.so`art_sigsegv_fault
frame #1: 0xf00e3fa4 libart.so`art::FaultManager::HandleFault(int, siginfo*, void*) + 372
frame #2: 0xf00e3ccb libart.so`art::art_fault_handler(int, siginfo*, void*) (.llvm.2308358812779254744) + 43
frame #3: 0x5fd1afe1 app_process32`___lldb_unnamed_symbol25$$app_process32 + 625
frame #4: 0xf17d7180 libc.so`___lldb_unnamed_symbol2$$libc.so + 1
frame #5: 0xc28d951c libnative-lib.so`vcode_synth_frame_rate at vocoder.c:1112
frame #6: 0xc28d77bc libnative-lib.so`vcode_action at vocoder.c:1315
frame #7: 0xc28680b3 libnative-lib.so`android_live_render(frames_number=128, ioData=0xc2930004) at app_delegate.c:198
frame #8: 0xc286853b libnative-lib.so`do_stuff at app_delegate.c:265
frame #9: 0xf186c140 libc.so`ru_reseed + 4
frame #10: 0xeff73f21 libart.so
从那里开始,有时它会在函数中显示更多行,但大多数情况下它只会停在函数名称上。
据我了解,SEGV_ACCERR
表示我正在访问一个我不是其所有者的地址。在构建文件中,我有以下内容:
defaultConfig {
...
ndk {
abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
}
}
使用 Android 9. 我不明白问题出在哪里,因为调试器不会证明特定的行,而只会证明函数名称,如回溯中所示。
每个运行都会给出相同的活动地址,0xf523dffc
显然,当指示函数名称时,可能意味着该函数的堆栈溢出。我将 static 关键字添加到 vcode_synth_frame_rate
中的一些数组,然后 SIGSEGV
错误消失了。
这个我还是不太明白,如果谁有更详细的信息请补充回答,我会标记为采纳的回答。