【发布时间】:2016-11-25 21:21:06
【问题描述】:
我正在开发一个在 Android 上调试的 C++ 应用程序;碰巧的是,在某些设备上,此应用程序崩溃了。我已经将它缩小到一个函数,我尝试在ndk-gdb 中使用断点进行调试。第一次,在启动时,该函数运行并且中断正常,例如:
Breakpoint 1, MyApp::MyFunc (this=0xb8541c40, curel=0xb8cb7e68, doShow=false)
at /path/to/src/MyApp.cpp:1600
1600 myObj.clear();
(gdb) c
Continuing.
这里,显然我自己输入了c 和ENTER;但随后,在用户操作时,该函数第二次运行,我得到了这个:
Breakpoint 1, MyApp::MyFunc (this=0xb8541c40, curel=0xb8cb7e68, doShow=true)
at /path/to/src/MyApp.cpp:1600
1600 myObj.clear();
(gdb)
Continuing.
Program received signal SIGABRT, Aborted.
0xb6f7b1b0 in tgkill ()
from /path/to/obj/local/armeabi-v7a/libc.so
(gdb)
Continuing.
Program received signal SIGABRT, Aborted.
0xb6f7b1b0 in tgkill ()
from /path/to/obj/local/armeabi-v7a/libc.so
(gdb)
Continuing.
Program terminated with signal SIGABRT, Aborted.
The program no longer exists.
所以,这里的断点确实命中了,但它没有中断——即使我没有按c,它也会继续“继续”,一次又一次地点击 SIGABRT “继续”,最后是程序终止。
从这里有限的信息中,有人知道为什么会发生这种情况,以及如何补救吗?例如,这可能是由于优化(应用程序在应该是调试模式下编译,但可能仍然存在一些优化)?顺便说一句,这是 GNU gdb (GDB) 7.7,android-ndk-r10e。
【问题讨论】:
-
在再次命中断点之前,代码第二次使用 SIGABRT 崩溃。当您获得 SIGABRT 时,请查看回溯。
-
感谢@SamVarshavchik - 偶尔它会在 sigabrt 处停止,我尝试发出回溯,但它没有显示任何明显的东西......但是很高兴能澄清断点没有第二次击中,我会再试一次 - 干杯!
标签: c++ debugging android-ndk gdb