StackOverflowError:堆栈大小16KB

时间:2016-07-27 14:30:34

标签: android multithreading android-source

当应用程序尝试创建堆栈大小为“1024000”的线程时,我在Android 5.1.1版本中面临“StackOverflowError:堆栈大小16KB”。以下是崩溃消息。

但是当堆栈大小向上舍入1024时,这个问题就消失了。(1025024)。在下面的示例中, m_uStackSize 是堆栈大小。

我尝试在libc.so中调试线程调用。但到目前为止还没有任何线索。任何想法将不胜感激。

请使用以下链接回溯日志。

1附件

编辑1:

pthread_attr_t     threadAttr;

struct sched_param schedParams;

VPTYPE_RETURN      result;



pthread_attr_init(&threadAttr);



pthread_attr_setstacksize(&threadAttr, m_uStackSize);

pthread_attr_setdetachstate(&threadAttr, PTHREAD_CREATE_DETACHED);

pthread_attr_setschedpolicy(&threadAttr, SCHED_OTHER);



int priMax = sched_get_priority_max(SCHED_OTHER);

int priMin = sched_get_priority_min(SCHED_OTHER);



schedParams.sched_priority = priMin + (((255 - m_uPriority) * (priMax - priMin)) / 255);

pthread_attr_setschedparam(&threadAttr, &schedParams);



result = pthread_create(&m_threadHandle, &threadAttr, (void*(*)(void*))staticEntryPoint, this);



pthread_attr_destroy(&threadAttr);

还有一点需要注意。我正在为Android设备开发BSP。此代码示例来自应用程序,该应用程序与其他标准Android设备和移动设备无关。

BSP似乎有问题,从崩溃消息我可以看到它在libc中。

堆栈跟踪

gnal 6(SIGABRT),代码-6(SI_TKILL),故障地址--------

中止消息:'art / runtime / thread.cc:1106]没有预期的未决异常:java.lang.StackOverflowError:堆栈大小16KB'

r0 00000000 r1 00000643 r2 00000006 r3 00000000

r4 a3305db8 r5 00000006 r6 00000002 r7 0000010c

r8 00000001 r9 b4f4f550 sl a3b13400 fp a3b34900

ip 00000643 sp a3305310 lr b6e98fc1 pc b6ebbe58 cpsr 60070010

回溯:

00 pc 00039e58 /system/lib/libc.so(tgkill + 12)

01 pc 00016fbd /system/lib/libc.so(pthread_kill + 52)

02 pc 00017bcf /system/lib/libc.so( raise + 10)

03 pc 0001439d /system/lib/libc.so(__libc_android_abort + 36)

04 pc 00012a3c /system/lib/libc.so(abort + 4)

05 pc 00226033 /system/lib/libart.so(art :: Runtime :: Abort()+ 170)

06 pc 000a72e9 /system/lib/libart.so(art :: LogMessage :: ~LogMessage()+ 1360)

07 pc 0025629d /system/lib/libart.so(art :: verifier :: MethodVerifier :: GetQuickInvokedMethod(art :: Instruction const *,art :: verifier :: RegisterLine *,bool)+280)

08 pc 0025a66b /system/lib/libart.so(art :: verifier :: MethodVerifier :: VerifyInvokeVirtualQuickArgs(art :: Instruction const *,bool)+50)

09 pc 0025e7c3 /system/lib/libart.so(art :: verifier :: MethodVerifier :: CodeFlowVerifyInstruction(unsigned int *)+ 4918)

10 pc 00260323 /system/lib/libart.so(art :: verifier :: MethodVerifier :: CodeFlowVerifyMethod()+ 142)

11 pc 002607c7 /system/lib/libart.so(art :: verifier :: MethodVerifier :: VerifyCodeFlow()+ 614)

12 pc 0026093f /system/lib/libart.so(art :: verifier :: MethodVerifier :: Verify()+ 130)

13 pc 00261feb /system/lib/libart.so(art :: verifier :: MethodVerifier :: FindLocksAtDexPc(art :: mirror :: ArtMethod *,unsigned int,std :: __ 1 :: vector

14 pc 001f41e5 /system/lib/libart.so(art :: Monitor :: VisitLocks(art :: StackVisitor *,void()(art :: mirror :: Object ,void *),void *,bool)+252)

15 pc 00233a07 /system/lib/libart.so(art :: StackDumpVisitor :: VisitFrame()+ 374)

16 pc 0022dbeb /system/lib/libart.so(art :: StackVisitor :: WalkStack(bool)+702)

17 pc 002361c9 /system/lib/libart.so(art :: Thread :: Dump(std :: __ 1 :: basic_ostream>&)const + 224)

18 pc 0023f31d /system/lib/libart.so(art :: ThreadList :: DumpLocked(std :: __ 1 :: basic_ostream>&)+ 120)

19 pc 00225d91 /system/lib/libart.so(art :: AbortState :: Dump(std :: __ 1 :: basic_ostream>&)+ 272)

20 pc 00225fdb /system/lib/libart.so(art :: Runtime :: Abort()+ 82)

21 pc 000a72e9 /system/lib/libart.so(art :: LogMessage :: ~LogMessage()+ 1360)

22 pc 00233d85 /system/lib/libart.so(art :: Thread :: AssertNoPendingException()const + 396)

23 pc 0023940d /system/lib/libart.so(art :: Thread :: CreatePeer(char const *,bool,_jobject *)+ 456)

24 pc 0023a265 /system/lib/libart.so(art :: Thread :: Attach(char const *,bool,_jobject *,bool)+236)

25 pc 00223309 /system/lib/libart.so(art :: Runtime :: AttachCurrentThread(char const *,bool,_jobject *,bool)+16)

26 pc 001bccf1 /system/lib/libart.so(art :: JII :: AttachCurrentThread(_JavaVM *,_ JNIEnv **,void *)+ 216)

27 pc 000c0773 /system/lib/libart.so(art :: CheckJII :: AttachCurrentThread(_JavaVM *,_ JNIEnv **,void *)+ 110)

28 pc 00039865 /data/app/us.my.test.app-1/lib/arm/libXyclops.so(VPThreadInfo :: entryPoint()+ 36)

29 pc 000398c3 /data/app/us.my.test.app-1/lib/arm/libXyclops.so(VPThreadInfo :: staticEntryPoint(void *)+ 6)

30 pc 0001674b /system/lib/libc.so(__pthread_start(void *)+ 30)

31 pc 000146fb /system/lib/libc.so(_start_thread + 6)

0 个答案:

没有答案