当 ddd "waiting for it to get ready"时,gdb/dbx 在做什么?
What is gdb/dbx doing when ddd is "waiting for it to get ready"?
我使用ddd作为c++程序的gdb和dbx的前端。
很多时候,没有任何明显的原因,我将尝试next
,它将挂起的消息"等待gdb准备好"或"等待dbx准备好"。
有谁知道他们在做什么花了很长时间却没有产生明显的结果吗?我能阻止它发生吗?
请记住,已经加载了足够的东西,我已经很高兴地在同一进程(和同一函数)中提前一分钟步进/下一步,所以无论他们在做什么,似乎都没有必要。此外,ddd和dbx都具有相同的行为模式(在许多不同的可执行文件和不同的平台上),这使我认为这是数据中的某些东西,而不是调试器中的错误。
GDB(同样适用于DBX)使用MI协议与DDD通信,MI协议是命令行接口的标准化且明确的等同物。
备注:在我的系统(Fedora 15)中的默认值似乎是它们直接使用CLI进行通信,但我只注意到您描述的--interpret=mi
问题。
例如,下面是获取线程列表的相应输出:
(gdb) info threads
Id Target Id Frame
2 Thread 0x7ffff7fd2700 (LWP 9191) "philosophers" 0x00000037dcc0b4c5 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
1 Thread 0x7ffff7fd3720 (LWP 9182) "philosophers" 0x00000037dc8df461 in clone () from /lib64/libc.so.6
(gdb) -thread-info
^done,threads=[
{id="2",target-id="Thread 0x7ffff7fd2700 (LWP 9525)",name="philosophers",
frame={level="0",addr="0x0000000000400b31",
func="chopsticks_put",
args=[{name="i",value="0"}],
file="chopsticks.c",fullname="philosphers/chopsticks.c",line="70"},
state="stopped",core="2"},
{id="1",target-id="Thread 0x7ffff7fd3720 (LWP 9522)",name="philosophers",
frame={...},
state="stopped",core="1"
}],current-thread-id="3"
所以你将在DDD中看到的与CLI中的非常相似,只有"表示层"不同。
从我的经验来看,大多数GDB命令都非常快,至少当它们不依赖于被调试对象的执行时(比如next
而不是sleep(5)
)。所以你的问题有两种可能:
- 通信中的错误:例如
^done
标签被DDD遗漏或被GDB忘记,因此DDD徒劳地等待其请求的终止 - DDD向GDB请求大量的数据,如结构的定义、函数位置或内存内容等(例如,因为您想要监视的元素),因此GDB计算这些信息并将其传输到DDD需要一些时间。
在DDD的底部有GDB console
。试着在里面输入一些GDB命令。如果GDB正确响应(我的例子),则意味着DDD不再与GDB同步。(DDD越来越老了,2009/02/11,而MI被eclipse广泛使用,所以我想我们知道谁应该受到指责…)
相关文章:
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- 如何找出GDB的SIGTRAP核心转储的根本原因
- 如何使用gdb制作一个可以漂亮地打印每个对象的C++函数
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 使用vscode调试时,GDB意外退出
- 如何防止 CUDA-GDB 中的<优化输出>值
- fopen 在 gdb 中返回 NULL
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 结构字段名称与 GDB 中的 STL 数组冲突
- 如何在带有 gdb GUI 前端的 ARM gdbserver 的 PC 上执行远程 gdb 会话?
- GDB 断点在 Mac 上是不准确的
- 如何解释GDB中回溯的模板函数签名?
- 如果以下行不包含决策或分支,GDB 无法单步跳过函数
- 这是 ubuntu 16.04 中的 gdb 错误吗?
- 如何为从 Python 调用C++启动 GDB?
- 如何打印源文件中与 GDB 中的程序流关联的所有行号
- 堆叠协程 + gdb = "previous frame inner to this frame (corrupt stack)?"
- 带有 GDB 调试器的 VS 代码内存视图
- gdb中的what命令与dbx中的pathmap相同
- 当 ddd "waiting for it to get ready"时,gdb/dbx 在做什么?