gpt4 book ai didi

c++ - 为什么 gdb 会在断点处自动继续?

转载 作者:行者123 更新时间:2023-11-30 03:36:12 25 4
gpt4 key购买 nike

我正在开发一个在 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.

在这里,我显然自己输入了 cENTER;但是随后,根据用户操作,该函数第二次运行,我得到了:

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“继续” ",最后程序终止。

根据此处有限的信息,有人知道为什么会发生这种情况,以及如何补救吗?例如,这可能是由于优化(应用程序是在 Debug模式下编译的,但可能仍然存在一些优化)?顺便说一句,这是 GNU gdb (GDB) 7.7,android-ndk-r10e。

最佳答案

该死的,我很笨 :).. 看,发生的事情是,在我第一次发出 c 之后,我在 gdb 中收到了一堆消息,然后在应用等待输入时它们会暂时停止。而且,通常我在这里按 ENTER 几次,所以我在终端输出中有几行空行,以分隔日志中的新阶段。

但是,gdbENTER 解释为“重复上一个命令”,这里是 continue,所以,它基本上“运行结束”断点和 sigabrt 发生时(我确实觉得很奇怪为什么我只在 sigabrt 处中断有时)。

好吧,在调试 :) 时,不要按 ENTER 在终端输出中留出空间(并确保之前没有挂起的进程与 gdb)

的 session 严重终止

关于c++ - 为什么 gdb 会在断点处自动继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40812409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com