通过 GDB 调试 DMD 生成程序

Posted

技术标签:

【中文标题】通过 GDB 调试 DMD 生成程序【英文标题】:Debugging DMD Generate Program through GDB 【发布时间】:2013-06-30 15:59:06 【问题描述】:

我正在尝试调试我的第一个使用 D 编译的程序

dmd -debug hello.d

但是当我通过 GDB-7.6 运行可执行文件时,它似乎不知道在哪里可以找到源代码并解码堆栈跟踪的格式(及其名称解构)。

是否尚不支持 GDB 调试 DMD 生成的可执行文件,或者我遗漏了什么?

【问题讨论】:

【参考方案1】:

-debug 标志表示启用了调试代码,这与具有调试符号不同。您要查找的标志是-g-gc

有关编译器标志的更多信息,请参阅http://dlang.org/dmd-linux.html#switches。

【讨论】:

好的。所以我添加了标志-gc,但它仍然不起作用。它现在与warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000 出错。命令 break main 失败,但在执行期间按 Ctrl-C 似乎使 gdb 进入可用状态。 我正在通过 Emacs 运行 GDB,堆栈帧的格式似乎也让 Emacs 感到困惑。我无法单击它们来更改堆栈框架。至少当我按下 Ctrl-C 时,变量视图似乎可以工作。 只是为了检查简单的事情:“dmd -gc hello.d”会生成一个名为“hello”的可执行文件。 “gdb ./hello”(直接来自终端,让我们暂时不考虑 emacs)应该不会产生错误,除了可能要求安装更多调试库。 "run" 应该像往常一样在 gdb 中运行程序。 要使用 DUB 进行配置,我们可以添加:` "dflags": [ "-m64", "-g", "-gc" ] ` to dub.json

以上是关于通过 GDB 调试 DMD 生成程序的主要内容,如果未能解决你的问题,请参考以下文章

gdb,程序调试助手

尝试调试 D 程序时出错

GDB调试实战给程序传递启动参数

gdb - 使用管道进行调试

gdb 调试程序

Nginx之跟踪与调试