gpt4 book ai didi

linux - 我如何让 gdb 在 linux 下使用 D 程序?

转载 作者:IT王子 更新时间:2023-10-29 00:43:15 24 4
gpt4 key购买 nike

我有一个打过补丁的 gdb 6.8,但我无法进行任何调试。鉴于此测试文件:

import std.stdio;

void main()
{
float f = 3.0;
int i = 1;
writeln(f, " ", i);
f += cast(float)(i / 10.0);
writeln(f, " ", i);
i++;
f += cast(float)(i / 10.0);
writeln(f, " ", i);
i += 2;
f += cast(float)(i / 5.0);
writeln(f, " ", i);
}

并尝试在命令行上进行调试:

bash-4.0 [d]$ dmd -g test.d  # '-gc' shows the same behaviour.
bash-4.0 [d]$ ~/src/gdb-6.8/gdb/gdb test
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
(gdb) list
1 ../sysdeps/i386/elf/start.S: No such file or directory.
in ../sysdeps/i386/elf/start.S

并使用 Eclipse 调试项目

使用-gc:

Dwarf Error: Cannot find DIE at 0x134e4 referenced from DIE at 0x12bd4 [in module /home/bernard/projects/drl/drl.i386]
(gdb) Dwarf Error: Cannot find DIE at 0x1810 referenced from DIE at 0x1b8 [in module /home/bernard/projects/drl/drl.i386]

使用-g:

(gdb) Die: DW_TAG_<unknown> (abbrev = 7, offset = 567)
has children: FALSE
attributes:
DW_AT_byte_size (DW_FORM_data1) constant: 4
DW_AT_type (DW_FORM_ref4) constant ref: 561 (adjusted)
DW_AT_containing_type (DW_FORM_ref4) constant ref: 539 (adjusted)
Dwarf Error: Cannot find type of die [in module /home/bernard/projects/drl/drl.i386]

我在 Digital Mars 新闻组上看到过很多这样的帖子,但似乎都被忽略了。任何人都可以阐明情况吗?

我知道 ZeroBUGS,但我真的想让 gdb 工作。

更新:

感谢 luca_,在 IRC(freenode,#D)上,我得到了一个简单的案例(一个文件):

(gdb) list Dmain
1 void main()
2 {
3 float f = 3.0;
4 int i = 1;
5 f += cast(float)(i / 10.0);
6 i++;
7 f += cast(float)(i / 10.0);
8 i += 2;
9 f += cast(float)(i / 5.0);
10 }
(gdb) break 3

不幸的是,我的由多个文件组成的项目因 DWARF 错误而终止。

编辑:

截至 2.036(我认为),DMD 生成的 GDB 调试信息是正确的,并且应该按预期工作。

最佳答案

您可能偶然发现了一个 GDB 错误,该错误最近已修复 here .

要获得修复,您必须从 CVS Head 构建 GDB。关于如何获得它的说明是 here .

如果这不能解决问题,可能是由于 GDB 中的另一个错误,或者可能是 dmd 发出了不正确的 DWARF调试信息。我建议在 GDB 中打开一个错误 bugzilla并附加您的小型可执行文件(以及它需要的所有运行时库)。

关于linux - 我如何让 gdb 在 linux 下使用 D 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1581560/

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