以下代码在打印字符串后导致分段错误:
#include <iostream>
using namespace std;
int main()
{
cout << "ndktest" << endl;
return 0;
}
- 如果我将 cout 更改为 printf,它不会崩溃。
- 如果我在 main 以外的其他函数中调用 cout,并且该函数从未被访问过,它仍然会崩溃。
- 它在 Froyo 上崩溃,但不是 ICS。
作为参考,这是我的 Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ndktest
LOCAL_SRC_FILES := main.cpp
include $(BUILD_EXECUTABLE)
和 Application.mk:
APP_STL := stlport_static
这是来自 logcat 的崩溃:
I/DEBUG ( 872): pid: 4234, tid: 4234 >>> /data/ndktest <<<
I/DEBUG ( 872): signal 11 (SIGSEGV), fault addr 00024004
I/DEBUG ( 872): r0 00033824 r1 00001000 r2 00024005 r3 bea42cfc
I/DEBUG ( 872): r4 40008090 r5 0000000a r6 40008000 r7 afd42328
I/DEBUG ( 872): r8 00000000 r9 00000000 10 00000000 fp 00000000
I/DEBUG ( 872): ip 40008084 sp bea42ce8 lr afd192dd pc 00024004 cpsr 60000030
I/DEBUG ( 872): d0 0000000000000000 d1 0000000000000000
I/DEBUG ( 872): d2 0000000000000000 d3 0000000000000000
I/DEBUG ( 872): d4 0000000000000000 d5 0000000000000000
I/DEBUG ( 872): d6 0000000000000000 d7 0000000000000000
I/DEBUG ( 872): d8 0000000000000000 d9 0000000000000000
I/DEBUG ( 872): d10 0000000000000000 d11 0000000000000000
I/DEBUG ( 872): d12 0000000000000000 d13 0000000000000000
I/DEBUG ( 872): d14 0000000000000000 d15 0000000000000000
I/DEBUG ( 872): scr 00000000
I/DEBUG ( 872):
I/DEBUG ( 872): #00 pc 00024004
I/DEBUG ( 872): #01 pc 000192da /system/lib/libc.so
I/DEBUG ( 872): #02 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #03 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #04 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #05 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #06 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #07 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #08 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #09 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #10 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #11 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #12 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #13 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #14 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #15 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #16 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #17 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #18 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #19 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #20 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #21 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #22 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #23 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #24 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #25 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #26 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #27 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #28 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #29 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #30 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872): #31 pc 0001972c /system/lib/libc.so
I/DEBUG ( 872):
I/DEBUG ( 872): code around pc:
I/DEBUG ( 872): 00023fe4 ffffffff ffffffff ffffffff ffffffff
I/DEBUG ( 872): 00023ff4 ffffffff ffffffff ffffffff ffffffff
I/DEBUG ( 872): 00024004 ffffffff ffffffff ffffffff ffffffff
I/DEBUG ( 872): 00024014 ffffffff ffffffff ffffffff ffffffff
I/DEBUG ( 872): 00024024 ffffffff ffffffff ffffffff ffffffff
I/DEBUG ( 872):
I/DEBUG ( 872): code around lr:
I/DEBUG ( 872): afd192bc f8cde018 f7f4e00c b930ec56 0c0cf844
I/DEBUG ( 872): afd192cc 46302201 f7f49900 9803ec4e 47909a05
I/DEBUG ( 872): afd192dc f1153c0c d5d735ff 2e006836 463cd1ce
I/DEBUG ( 872): afd192ec b9b99901 c03cf8df 300cf857 f8471e58
I/DEBUG ( 872): afd192fc b978000c 587a490c e0046810 68059900
I/DEBUG ( 872):
I/DEBUG ( 872): stack:
I/DEBUG ( 872): bea42ca8 b000c9b8
I/DEBUG ( 872): bea42cac 00000014
I/DEBUG ( 872): bea42cb0 b00093e0 /system/bin/linker
I/DEBUG ( 872): bea42cb4 b001e9b8
I/DEBUG ( 872): bea42cb8 b000c9b8
I/DEBUG ( 872): bea42cbc b0001c78 /system/bin/linker
I/DEBUG ( 872): bea42cc0 b001e724
I/DEBUG ( 872): bea42cc4 00000005
I/DEBUG ( 872): bea42cc8 b000c9b8
I/DEBUG ( 872): bea42ccc b0001de3 /system/bin/linker
I/DEBUG ( 872): bea42cd0 b000c9b8
I/DEBUG ( 872): bea42cd4 b0002c77 /system/bin/linker
I/DEBUG ( 872): bea42cd8 00000000
I/DEBUG ( 872): bea42cdc b001ffe8
I/DEBUG ( 872): bea42ce0 df002777
I/DEBUG ( 872): bea42ce4 e3a070ad
I/DEBUG ( 872): #01 bea42ce8 00001000
I/DEBUG ( 872): bea42cec 00000000
I/DEBUG ( 872): bea42cf0 bea42cfc
I/DEBUG ( 872): bea42cf4 00033824
I/DEBUG ( 872): bea42cf8 00000000
I/DEBUG ( 872): bea42cfc 00024005
I/DEBUG ( 872): bea42d00 00033824
I/DEBUG ( 872): bea42d04 00000000
I/DEBUG ( 872): bea42d08 00000000
I/DEBUG ( 872): bea42d0c 00000000
I/DEBUG ( 872): bea42d10 b000c9b8
I/DEBUG ( 872): bea42d14 00000000
I/DEBUG ( 872): bea42d18 00000000
I/DEBUG ( 872): bea42d1c afd19731 /system/lib/libc.so
I/BootReceiver( 946): Copying /data/tombstones/tombstone_09 to DropBox (SYSTEM_TOMBSTONE)
通过堆栈跟踪工具运行它并没有产生任何符号信息。
更新:
崩溃转储中的 pc 值(/system/lib/libc.so 中的 0001972c)在退出例程中,这与打印字符串后崩溃一致:
00019728 <exit>:
19728: 4604 mov r4, r0
1972a: 2000 movs r0, #0
1972c: f7ff fd8c bl 19248 <__cxa_finalize>
19730: 4620 mov r0, r4
19732: f7f3 ee96 blx d460 <_exit>
19736: bf00 nop