2010-03-24 20 views
1

首先,當...這是在這個地方我的消息#1,所以......請跟我好;)怎麼看外部庫中的代碼調試

剛開始我最近研究的Gnome應用程序/庫,我發現調試器是一種很好的學習方式,因爲看到運行的代碼有助於理解程序的結構。

但我有一個問題。例如,調試gnome-panel我發現了很多對外部函數(基本上是GTK +函數)的調用,雖然假裝看到所有函數應用程序的所有代碼都像這個調用一樣瘋狂,但是還有很多看到在行動非常有趣。問題是調試器沒有加載這些庫的代碼,並且它不能顯示給我 - 在大多數情況下,它顯示執行的行號。

我使用Nemiver,當它試圖在外部函數中輸入它聲稱,因爲它找不到它應該在某個地方的文件。例如,嘗試輸入gtk_window_set_default_icon_name它會嘗試加載/build/buildd/gtk+2.0-2.16.1/gtk/gtkwindow.c,並調用XSetIOErrorHandler,../../src/ErrHndlr.c

所以,現在我認爲我做錯了什麼......爲什麼Nevimer正在那些地方尋找那些源文件?

我的系統甚至沒有/ build/buildd /文件夾...我不知道我是否做錯了什麼,或者我需要安裝somethig或什麼。

有什麼建議嗎?你如何調試這種應用程序?

最好的問候和感謝你的時間很多 - 原諒我,如果我的英語不好。

回答

0

呃......這個問題比我想象的要簡單得多。

因爲Nemiver試圖訪問一些不存在的文件夾我認爲創建它們將是一個選項,它是xDDDDD。

Nemiver有一個選項來加載源文件在文件 - >打開源文件 [我真的不知道這是因爲我看到節目在西班牙的選項的名稱完全]當你選擇它會打開一個對話框,它的兩個主要選項之一是從您想要查找源文件的位置進行選擇:從可執行文件或文件系統中進行選擇......我從可執行選擇在那裏我看到了奇怪路徑開始/建造。然後,我假設可執行文件知道源文件在哪裏構建它...

那麼,總結:我已經滿足了Nemiver有關源路徑的假設,現在一切都自動工作。

例如:由於Nemiver告訴我,GTK +的文件均/build/buildd/gtk+2.0-2.16.1/gtk/我創建/編譯/ buildd和我已經下載了GTK +(2.16.1)。然後,我與名GTK + 2.0-2.16.1,現在當我嘗試在GTK +的功能進入,Nemiver自動加載對應的文件,並顯示我一步:)

它的執行步驟,解壓縮它buildd
0

調試器執行源文件中的行,編譯時(啓用調試符號)會生成二進制文件。在外部庫的情況下,它們作爲單獨的實體(目標文件)運輸並與當前代碼鏈接以生成可執行文件。

如果調試器可以遍歷源文件,則會生成與源庫文件相對應的源文件,這會破壞很多專業合同。因此,我不確定是否可行。

但是,您所談論的GTK庫是開源的,API調用記錄在here。因此,海事組織會更好地節省時間,以便知道某個函數對庫的作用,並與您的其他代碼一起使用。