2014-01-09 102 views
6

我已經在我的Ubuntu 13.10 x86_64上成功構建並安裝了Ian Buclaw's(ibuclaw)GDB分支,其默認編譯器GCC 4.8.1已在我的Ubuntu 13.10 x86_64上安裝。使用GDB進行調試不能查找D程序符號

我不得不從bin子目錄中刪除文件ld否則 DMD抱怨鏈路階段的sysroot事情。

當我編譯我的測試程序並通過GDB運行時,我有 問題。

我可以做break main,運行和GDB停靠在main開始,但是當我做next我得到以下不需要輸出

Single stepping until exit from function main, 
    which has no line number information. 
    0x00007ffff760ede5 in __libc_start_main() from 
    /lib/x86_64-linux-gnu/libc.so.6 

是不是ibuclaw的GDB應該在這裏工作?

我的測試程序被編譯爲

dmd -debug -g -gs -wi t_array.d -oft_array 

沒有任何警告,也沒有錯誤。我也試着假裝爲C

dmd -debug -g -gc -gs -wi t_array.d -oft_array 

具有相同的結果。

此外,當我做b後跟選項卡時, 中的大部分符號都未被取消折疊。

我的測試程序看起來像

import std.stdio, std.algorithm; 

void main(string args[]) { 
    int[] x; 
    writeln(x.sizeof); 

    if (x) { 
     writeln("Here!"); 
    } else { 
     writeln("There!"); 
    } 

    int xx[2]; 
    auto xc = xx; 
    xc[0] = 1; 
    writeln(xx); 
    writeln(xc); 
    int[2] xx_; 


    auto hit = x.find(1); 
    if (hit) { 
     writeln("Hit: ", hit); 
    } else { 
     writeln("No hit"); 
    } 
    int[2] z;     // arrays are zero initialized 
    writeln(z); 

    assert([].ptr == null); 
    assert("ab"[$..$] == []); 
    auto p = "ab"[$..$].ptr; 
    writeln(p); 
    assert(p != null); 
} 

回答

3

很適合我的MonoDevelop和GDB調試器(不使用gdb debuger爲d),你應該使用啓動命令,而不是休息爲主。更多細節在你的dlangs論壇主題: http://forum.dlang.org/thread/[email protected]

+0

現在一切正常!平原精彩! –

+0

當我像上面那樣運行它時,在GDB中執行'print SYMBOL'時,幾乎沒有任何D符號能夠正確顯示與名稱demangling及其值有關的信息。這是ibuclaw的GDB的現狀還是我錯過了什麼? –

+0

GDB還無法對全部D符號進行解構。 Iain Buclaw(GDC項目的核心開發人員)最近做了一些改進,很快希望將其合併到主要的GDB代碼中,這對我們有很大的幫助。你有沒有試圖用GDC編譯你的D程序? – DejanLekic