gpt4 book ai didi

android - 需要帮助进一步调试 SEGV 问题 - Android NDK

转载 作者:行者123 更新时间:2023-11-29 02:06:08 25 4
gpt4 key购买 nike

我正在构建一个包含大量 Android 源代码的库。如果为 Linux x86 编译,该库工作正常。我正在使用独立的工具链构建它。我之前在其他库中已经成功地做到了这一点,所以我觉得我的设置很好。无论如何,编译和链接都很好,但是当我加载生成的共享库时,我得到了一个 SEGV。这是我得到的痕迹:

03-23 23:37:14.213: I/DEBUG(28): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
03-23 23:37:14.213: I/DEBUG(28): Build fingerprint: 'generic/sdk/generic/:2.1-update1/ECLAIR/35983:eng/test-keys'
03-23 23:37:14.224: I/DEBUG(28): pid: 332, tid: 332 >>> com.example.hellojni <<<
03-23 23:37:14.224: I/DEBUG(28): signal 11 (SIGSEGV), fault addr 00000000
03-23 23:37:14.224: I/DEBUG(28): r0 00000000 r1 00000000 r2 80808080 r3 00000000
03-23 23:37:14.224: I/DEBUG(28): r4 00000000 r5 bea8154c r6 bea81600 r7 00000000
03-23 23:37:14.224: I/DEBUG(28): r8 bea81820 r9 41971894 10 00000354 fp bea814fc
03-23 23:37:14.224: I/DEBUG(28): ip 80a81058 sp bea814c0 lr 80a63cd8 pc afe0e7c8 cpsr 40000010
03-23 23:37:14.313: I/DEBUG(28): #00 pc 0000e7c8 /system/lib/libc.so
03-23 23:37:14.313: I/DEBUG(28): #01 pc 00063cd4 /data/data/com.example.hellojni/lib/libgnustl_shared.so
03-23 23:37:14.323: I/DEBUG(28): code around pc:
03-23 23:37:14.323: I/DEBUG(28): afe0e7b8 e31c0003 1afffff6 e1a00002 e59f20d8
03-23 23:37:14.323: I/DEBUG(28): afe0e7c8 e490c004 e0433000 f5d0f040 e04c13a2
03-23 23:37:14.323: I/DEBUG(28): afe0e7d8 e0011002 e1d1100c 0490c004 1a000022
03-23 23:37:14.323: I/DEBUG(28): code around lr:
03-23 23:37:14.323: I/DEBUG(28): 80a63cc8 e1a05000 e1a00001 e1a04001 ebff27d0
03-23 23:37:14.323: I/DEBUG(28): 80a63cd8 e1a01004 e1a02000 e1a00005 e8bd4070
03-23 23:37:14.323: I/DEBUG(28): 80a63ce8 eaffffa0 e590c000 e92d45f0 e51ce00c
03-23 23:37:14.323: I/DEBUG(28): stack:
03-23 23:37:14.323: I/DEBUG(28): bea81480 001479d0 [heap]
03-23 23:37:14.323: I/DEBUG(28): bea81484 bea81820 [stack]
03-23 23:37:14.323: I/DEBUG(28): bea81488 41971894 /dev/ashmem/dalvik-LinearAlloc (deleted)
03-23 23:37:14.323: I/DEBUG(28): bea8148c 00000354
03-23 23:37:14.334: I/DEBUG(28): bea81490 bea814fc [stack]
03-23 23:37:14.334: I/DEBUG(28): bea81494 00147a24 [heap]
03-23 23:37:14.334: I/DEBUG(28): bea81498 00000006
03-23 23:37:14.334: I/DEBUG(28): bea8149c 80a63b58 /data/data/com.example.hellojni/lib/libgnustl_shared.so
03-23 23:37:14.334: I/DEBUG(28): bea814a0 00000006
03-23 23:37:14.334: I/DEBUG(28): bea814a4 bea81548 [stack]
03-23 23:37:14.334: I/DEBUG(28): bea814a8 80a82110
03-23 23:37:14.334: I/DEBUG(28): bea814ac 00000000
03-23 23:37:14.334: I/DEBUG(28): bea814b0 bea81820 [stack]
03-23 23:37:14.334: I/DEBUG(28): bea814b4 80a63bcc /data/data/com.example.hellojni/lib/libgnustl_shared.so
03-23 23:37:14.334: I/DEBUG(28): bea814b8 df002777
03-23 23:37:14.334: I/DEBUG(28): bea814bc e3a070ad
03-23 23:37:14.344: I/DEBUG(28): #00 bea814c0 bea814d4 [stack]
03-23 23:37:14.344: I/DEBUG(28): bea814c4 00000000
03-23 23:37:14.344: I/DEBUG(28): #01 bea814c8 bea81548 [stack]
03-23 23:37:14.344: I/DEBUG(28): bea814cc bea81548 [stack]
03-23 23:37:14.344: I/DEBUG(28): bea814d0 bea81600 [stack]
03-23 23:37:14.344: I/DEBUG(28): bea814d4 8131f228 /data/data/com.example.hellojni/lib/libsharedB.so
03-23 23:37:14.344: I/DEBUG(28): bea814d8 afe39190 /system/lib/libc.so
03-23 23:37:14.344: I/DEBUG(28): bea814dc bea8152c [stack]
03-23 23:37:14.344: I/DEBUG(28): bea814e0 001479a0 [heap]
03-23 23:37:14.344: I/DEBUG(28): bea814e4 bea81548 [stack]
03-23 23:37:14.344: I/DEBUG(28): bea814e8 80a8211c
03-23 23:37:14.344: I/DEBUG(28): bea814ec 001479a0 [heap]
03-23 23:37:14.344: I/DEBUG(28): bea814f0 bea81548 [stack]
03-23 23:37:14.344: I/DEBUG(28): bea814f4 bea81548 [stack]
03-23 23:37:14.344: I/DEBUG(28): bea814f8 bea8151c [stack]
03-23 23:37:14.344: I/DEBUG(28): bea814fc 8131eb8c /data/data/com.example.hellojni/lib/libsharedB.so
03-23 23:37:14.344: I/DEBUG(28): bea81500 bea8152c [stack]
03-23 23:37:14.344: I/DEBUG(28): bea81504 0000272e
03-23 23:37:14.344: I/DEBUG(28): bea81508 80a82124
03-23 23:37:14.344: I/DEBUG(28): bea8150c 80a8211c
03-23 23:37:14.884: D/Zygote(30): Process 332 terminated by signal (11)
03-23 23:37:14.893: I/ActivityManager(52): Process com.example.hellojni (pid 332) has died.
03-23 23:37:14.966: I/UsageStats(52): Unexpected resume of com.android.launcher while already resumed in com.example.hellojni

如果我使用 addr2line,我会得到以下信息:

android-linux-addr2line.exe -C -f -e libc.so 0000e7c8
strlen
??:0

android-linux-addr2line.exe -C -f -e libgnustl_shared.so 00063cd4
std::string::operator=(char const*)
??:0

好的,所以字符串的静态赋值可能会出错。这将解释失败签名。那么,我如何找出源代码中发生这种情况的位置呢?我如何进行下一步并找到导致问题的分配位置?同样,这是一个庞大的源代码主体,而且似乎有许多字符串的静态分配。我需要缩小范围。

最佳答案

好的,所以跟踪的顶部部分没有帮助(这通常是我必须查看的唯一部分):

03-23     23:37:14.313: I/DEBUG(28):          #00  pc 0000e7c8  /system/lib/libc.so
03-23 23:37:14.313: I/DEBUG(28): #01 pc 00063cd4 /data/data/com.example.hellojni/lib/libgnustl_shared.so

但再往下我看到线条是这样的:

03-23 23:37:14.344: I/DEBUG(28):     bea814d4  8131f228  /data/data/com.example.hellojni/lib/libsharedB.so

如果我在这行和其他行上使用 addr2line 显示最近 libsharedB.so 中的一个函数在堆栈上,我得到了我的答案。唯一的额外技巧是 8131f228 不是我需要输入的地址。相反,我需要输入 0131f228。 80000000是库的基地址,其余是该空间内的地址。

关于android - 需要帮助进一步调试 SEGV 问题 - Android NDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9951604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com