2016-11-25 69 views
1

我調試在Eclise CDT這個程序(這是使用GDB),並且我得到以下幾點:我該如何讓CDT/GDB不抱怨失蹤的glibc資源?

... etc. ... 
[Thread debugging using libthread_db enabled] 
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". 

Program received signal SIGINT, Interrupt. 
2169 rtld.c: No such file or directory. 
dl_main (phdr=<optimized out>, phnum=<optimized out>, user_entry=<optimized out>, auxv=<optimized out>) at rtld.c:2169 

Temporary breakpoint 3, main (argc=3, argv=0x7fffffffd4a8) at /home/eyalroz/src/bbp-reader/src/main.cpp:104 
... etc. ... 

所以,它看起來像GDB一直在尋找源文件的glibc的rtld.c 。我可以下載資源,但是 - 我該怎麼處理它們?我把他們放在哪裏?

(我正在使用Kubuntu 16.04 Linux)。

回答

2

這裏有一些步驟,他們將工作(理論上)和其他軟件包:

  1. 啓用你的包管理

    來源我用突觸上的Xubuntu,但你應該能夠找到相當於對於KUbuntu和你的軟件包管理器,或者直接編輯0​​文件。

a。打開突觸 b。從設置菜單 - >選擇儲存庫 c。檢查源代碼複選框。 d。貼近並重新加載源列表

enable sources

爲libc6的-dev的
  • 下載源代碼。在沒有sudo的空目錄中,運行apt-get source libc6-dev。這將下載tar文件併爲您的平臺應用所有修補程序。在此之後,您應該有一個glibc-2.23/(或類似的)目錄

  • 在Eclipse CDT setup源查找映射C庫的構建時的目錄是什麼到您下載的地方。要做到這一點:

  • 步驟到要調試(在我的例子,我使用看跌期權)的C庫函數,你應該結束了與源沒有發現編輯器這樣的:

  • source not found

    1. 該編輯器向您顯示構建路徑。按找到文件...按鈕,然後瀏覽上面下載的特定源文件。這應該顯示你的源文件。

    2. 步驟5保存啓動配置中包含目錄的路徑。由於glibc很大並且包含多個目錄,因此您可能希望將此更改應用於所有目錄。要做到這一點: - >

    3. 打開

    4. 使用步驟4中顯示的路徑,直到glibc的目錄(/build/glibc-Qz8a69/glibc-2.23在我的例子)在全球範圍內的Eclipse CDT通過添加路徑映射C/C++ - >調試 - >來源查找路徑

    5. 添加...

    6. 選擇路徑映射,按確定並輸入您想要的名稱。

    7. 按添加

    8. 編譯路徑 STEP 7和本地文件系統路徑您的機器上相應的目錄輸入路徑。然後按確定。現在應該是這樣的:

    enter image description here

  • 調試了。
  • 或者,您可以對單個啓動配置進行更改。

    命令行GDB

    你可以在命令行做GDB一樣,下載源後。這裏有一條痕跡:

    $ gdb -q ./HelloSO 
    Reading symbols from ./HelloSO...done. 
    (gdb) b main 
    Breakpoint 1 at 0x40052a: file ../src/HelloSO.c, line 15. 
    (gdb) set substitute-path /build/glibc-Qz8a69/glibc-2.23 /tmp/x/glibc-2.23 
    (gdb) r 
    Starting program: /scratch/jacob/workspace/HelloSO/Debug/HelloSO 
    
    Breakpoint 1, main() at ../src/HelloSO.c:15 
    15  puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */ 
    (gdb) s 
    _IO_puts (str=0x4005c4 "!!!Hello World!!!") at ioputs.c:33 
    33 { 
    (gdb) s 
    35 _IO_size_t len = strlen (str); 
    (gdb) 
    
    相關問題