【问题标题】:What is gdb/dbx doing when ddd is "waiting for it to get ready"?当 ddd “等待它准备好”时,gdb/dbx 在做什么?
【发布时间】:2014-11-16 17:00:11
【问题描述】:

对于 C++ 程序,我使用 ddd 作为 gdb 和 dbx 的前端。

很多时候,没有任何明显的原因,我会尝试next,它会挂起消息“等待 gdb 准备好”或“等待 dbx 准备好”。

有没有人知道他们在做什么需要很长时间并且没有产生明显的结果? 我可以阻止它发生吗?

请记住,已经加载了足够多的东西,我很高兴在一分钟前在同一个过程(和同一个函数)中步进/下一步,所以无论他们在做什么似乎都不是必要的。此外,ddd 和 dbx 具有相同的行为模式(在许多不同的可执行文件和不同的平台上)这一事实让我认为这是数据中的某些东西,而不是任何一个调试器中的错误。

【问题讨论】:

  • 可能是 DDD 中的一个错误。您是否尝试过不使用任何前端直接在命令行 GDB 中重现此行为?

标签: c++ gdb dbx ddd-debugger


【解决方案1】:

GDB(同样适用于 DBX)使用 MI 协议与 DDD 通信,这是一种标准化且明确的命令行界面等价物。

备注:我的系统(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 被 Eclise 广泛使用,所以我想我们知道该怪谁了……!)

【讨论】:

    猜你喜欢
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2011-05-15
    • 2013-01-16
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多