问题标签 [ddd-debugger]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7896 浏览

multithreading - 获取有关 gdb/ddd 中线程的信息

我正在使用ddd.

同时每秒我都可以在 DDD控制台上看到创建了一个新线程

并在它之后立即销毁。

几分钟后,我有这个文本

随着这个 LWP 的增加。

线程来来去去太快,无法使用单击状态->线程的窗口显示。你能告诉我如何获取有关该线程的信息吗?

你知道为什么这个 LWP 一直在增加吗?更重要的是如何获得该线程中午餐的功能?

谢谢大家AFG

0 投票
2 回答
393 浏览

c - 如何使用 DDD 查找进程卡住的位置

我有一个用 C 语言编写并在 CentOS 5.5 上运行的 TCP Svr 进程。它充当外部客户端的 TCP 服务器,并使用它已建立的 Unix 域套接字与系统中的其他进程进行一些 IPC 通信。这不是一个多线程进程。它一次完成一项任务。我使用 epoll_wait() 来侦听 TCP 套接字或它与内部进程建立的任何 IPC 套接字上的请求。当 epoll_wait() 函数中断时,我会处理任何人的请求,然后返回到 epoll_wait()

我有一个从外部(不是 IPC)连接到这个进程的 TCP 客户端。它成功连接,发送请求消息,得到响应。我把它放在一个无限循环中只是为了测试它的鲁棒性等。

一段时间后,TCP Server 停止响应来自 TCP Client 的请求。TCP客户端连接成功,发送请求消息,但没有从TCP服务器得到任何响应消息。

所以我认为 TCP 服务器卡在其他地方,试图做某事并且没有返回到 epoll_wait() 来处理其他进来的请求。我试图用日志来解决这个问题,但这并不能帮助我理解到底在哪里进程卡住了。

所以我想使用任何可以给我一些信息的调试器(函数名会很棒),关于进程在做什么。设置断点是压倒性的,因为 TCP 服务器进程有大量的文件和函数......

我正在尝试在 CentOS 5.5 上使用 DDD,以了解发生了什么。我成功地附加到了这个过程。然后我点击“Step”或“Stepi”或“Next”按钮......但什么也没有发生......

顺便说一句,当我使用 Eclipse 进行调试并附加到该进程(或任何进程)时,我总是得到“__kernel_vsyscall()”....这是否意味着程序在默认情况下会在执行任何操作时中断?如果是这样,我如何摆脱 __kernel_vsyscall() 调用,继续我的程序?如果我按 f8,它会出来,但是我不知道它在哪里,因为我失去了堆栈跟踪......就像我之前说的。由于我不知道它在哪里,我不知道在哪里放置断点......

总之,我想弄清楚我的进程卡在哪里或者它在做什么,并尝试从那时起进行调试......

我该怎么做?

谢谢阿米特

0 投票
1 回答
467 浏览

unix - 从附加到 ddd/dbx 的崩溃进程生成核心转储

我在 Solaris 上的 ddd 中运行 dbx。附加的进程已经崩溃,我可以在调试器中检查堆栈。

我想将此核心转储保存到磁盘以供以后使用。

Google 向我展示了几种创建核心转储的方法,但它们都不是 ddd/dbx 命令。gcore无法抓取该进程,因为 dbx 已经在持有它。

那么我该怎么做呢?谢谢。

0 投票
1 回答
901 浏览

c++ - 当 ddd “等待它准备好”时,gdb/dbx 在做什么?

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

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

有谁知道他们正在做的事情是什么,这需要永远并且没有产生明显的结果?我可以阻止它发生吗?

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

0 投票
1 回答
242 浏览

c - C 缓冲区溢出显示消息(使用 Ubuntu 和 DDD)

这是我到目前为止得到的代码(得到了它的基础并坚持下去,这就是为什么有一个 badf 和 f 函数)

目标是程序通过溢出到指令指针来打印 Hello 消息。在Ubuntu中使用数据显示调试器,我相信这个显示的地址是0x0804811。

当我运行程序并使用 x/16x $esp 时,堆栈中的下一个地址仅为 1s(我猜只有最后两位数字来自上面的地址)

想知道的是如何使下一个地址成为完整地址,而不仅仅是最后两位数字。

32 也是从 16(上面定义的缓冲区)+ 8(基指针)+ 8(指令指针)计算出来的

提前感谢您的帮助,因为我知道这个具体问题。

0 投票
1 回答
330 浏览

c++ - ddd 调试器:是否需要在 CygWin 中构建 exe?

在 Windows 上,我通常使用 VC 编译器和我自己手工制作的 makefile 在 Windows 命令提示符下构建我的 exe。我正在考虑过渡到 g++。为了消除对 MSVC 的依赖,我正在考虑安装 CygWin/X 并利用 ddd 调试器。我的问题是:然后我是否必须完全转换到 CygWin 终端,或者我可以像现在一样在 Windows 命令提示符下继续,并将我完成的 Windows exe 呈现给ddd(不知何故) ?!

0 投票
2 回答
1559 浏览

emacs - 在 emacs(或 DDD)中使用 gdb 时无法设置断点

我正在尝试将 gdb 与 emacs 一起使用。我试图调试的库是由进程加载的,不能直接运行。因此,我使用 gdb 中的 attach 命令附加到该进程。当我在 shell 中使用 gdb 时,附加到进程并设置断点可以正常工作,但是当我在 emacs 中使用 gdb 时(通过按 Mx gdb 或 Mx gud-gdb),它无法设置断点。它向我显示了一个错误,上面写着“无法在 0x7efb04 访问内存”。我正在使用 emacs 23.1.1。

这是我遵循的过程的细分:

  1. M-x gdbM-x gud-gdb在 emacs 中启动 gdb。
  2. 输入使用调试符号构建的可执行文件的名称。
  3. 键入“attach [PID]”以将 gdb 附加到正在运行的进程。
  4. 通过键入以下内容设置断点:文件名:行号。

最后一步给了我一个错误,上面写着“无法在 0x7efb04 访问内存”。

任何想法为什么会发生这种情况?

编辑:我在使用 DDD(GDB 的 UI)时遇到同样的错误。所以我想这不是emacs特定的问题。

0 投票
0 回答
467 浏览

c - 可视化显示调试器,如 DDD

我在我的 Mac OSX lion 上安装 ddd 时遇到了很大的麻烦。

任何人都知道像 ddd 这样的任何其他可视化显示调试器吗?

它必须可视化显示调试器。

我的 Mac 上有 Eclipse,它带有调试器吗?如果是的话怎么去呢?

0 投票
1 回答
53 浏览

linux - 当程序在没有调试器和有调试器的情况下运行时,执行行为是不同的

我正在linux中运行一个程序。当我在 ddd 调试器中运行它时,程序的行为是不同的。那就是程序在不同的点停止。为什么会这样?它是依赖于调试器还是每个调试器有时都会发生?

0 投票
2 回答
1012 浏览

assembly - 在 DDD 中解释 eFlags

我正在尝试学习如何编写和理解x86 Assembly以及如何GDB有效地使用和相关工具。为此,我将DDD其用作GDB.

我无法理解条件标志(eflags?)的含义,因为它们似乎都存储在同一个寄存器中。我将发布寄存器、汇编代码和相关的 C 代码。感谢您提供任何帮助。

寄存器在给定断点处显示如下:0x293 [CF AF SF IF]

以下是正在运行的 C 代码。(这不是我编码风格的示例。我试图强制 GCC 使用该compl操作。)

以下是我的机器将其分解成的组件: