我正在嘗試在android的原生應用中調試segfault。 GDB顯示以下內容:如何防止堆棧損壞?
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 5200]
0xbfcc6744 in ??()
(gdb) bt
#0 0xbfcc6744 in ??()
#1 0x5cfb5458 in WWMath::unProject (x=2.1136094475592566, y=472.2994384765625, z=0, [email protected],
[email protected], [email protected]) at jni/src/core/util/WWMath.cpp:118
#2 0x00000000 in ??()
是否有可能獲得良好的堆棧?或者找到一個堆棧被破壞的地方?
UPD: 提到該函數的引用:
bool WWMath::unProject(double x, double y, double z, const Matrix &mvpMatrix,
const Rect& viewport, Vec4& result)
和參考簡單的本地變量作爲最後一個參數傳遞:
Vec4 far, near;
if (!unProject(x, y, 0, tMvp, viewport, near))
你用'-g'和'-O0'或'-O1'編譯過嗎? – 2012-08-07 11:09:45
...並始終總是編譯所有可能的警告。至少在「 - W -Wa -Wettra -pedantic」。 – 2012-08-07 11:11:23
不需要使用'-W',它只是'-Wextra'的一箇舊名稱。 http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wextra-259 – BoBTFish 2012-08-07 11:15:48