我有一个使用java和C ++的应用程序。最新版本似乎在C ++部分发生了损坏,我怀疑这可能是由于堆栈溢出造成的。所以我想知道:
是否有人要求在运行时询问这些内容?
答案 0 :(得分:0)
不是一个完整的答案,但我刚刚发现了GCC的-fstack-usage标志。这可能会有所帮助。
答案 1 :(得分:0)
Android上的默认pthread堆栈大小为1MB。默认的Dalvik堆栈大小要小得多(24 - 32KB),并且Dalvik堆栈不与本机堆栈共享。 (在艺术中,叠加组合。)
堆栈溢出会导致崩溃,除非您设法写入4KB保护页面。内存的排列不太可能使得写出线程堆栈的末尾会踩到你的全局变量,但这并非不可能。
堆栈垃圾更容易实现,但通常只会导致堆栈中的其他东西被冲洗掉。同样,不太可能覆盖全局。
听起来失败是确定性的,并且您确定了正在进行捣乱的代码。代码做了什么?全球持有的价值观(好的和坏的)是什么?知道它被破坏的东西 - 一个简单的整数,一个指针,随机的垃圾 - 可以很有启发性。