4

6.8 にパッチを適用gdbしましたが、デバッグが機能しません。このテスト ファイルを指定すると、次のようになります。

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います。

アップデート:

IRC (freenode、#D) の luca_ のおかげで、単純なケース (1 つのファイル) が機能するようになりました。

(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 デバッグ情報は正しく、期待どおりに動作するはずです。

4

2 に答える 2

1

最近ここGDBで修正されたバグに遭遇した可能性があります。

修正を取得するには、GDBCVSヘッドからビルドする必要があります。入手方法の説明はこちらです。

それでも問題が解決しない場合は、の別のバグが原因でGDBあるか、dmd誤ったDWARFデバッグ情報が出力されている可能性があります。GDB bugzillaでバグを開き、小さな実行可能ファイル(およびそれに必要なすべてのランタイムライブラリ)を添付することをお勧めします。

于 2009-10-17T17:19:28.853 に答える
0

答えは、 D 2.015 に戻ることができる場合は、 GDCを使用することのようです (これは D2 用です。D1 がどのくらい古いかはわかりません)。GDBはうまく機能します。

于 2009-11-23T10:24:47.443 に答える