2012-06-15 54 views
5

我想查看Wireshark的源代碼來了解協議分析, 但我發現當我只使用gdb ./wireshark時,當我按Ctrl + C並設置一個斷點,然後鍵入C,該進程死亡。我想知道libtool如何做GDB調試。爲什麼我必須使用libtool --mode ==執行gdb wireshark使其成爲可能調試wireshark

我已經讀過man libtool和它說的libtool是一個工具,可以很容易地通過一個簡單的界面使用各種.a.o,但我不知道,關鍵是什麼使gdb wireshark可能與libtool的。

回答

5

當您使用libtool構建程序時,它將處理在您的平臺中使用共享庫的所有困難和特性。

其中一個難點是調試,因爲調試時要加載安裝在系統中的而不是(它們只是編譯)的共享庫。所以當libtool建立一個可執行文件時,它會將它移動到一個隱藏的目錄(.libs)中,並且通常會放置一個腳本或類似的名稱,以便您可以看到它。該腳本將完成所有的魔法,以正確的庫運行正確的程序。

但是,顯然你不能用gdb調試腳本!因此,爲了正確的參數傳遞給gdb它能夠與正確的庫調試正確的程序,你必須運行命令:

$ libtool --mode=execute gdb ./wireshark 

你可以看到通過運行它做什麼:

$ libtool --mode=execute echo ./wireshark 

只是不直接從.libs使用文件:總是使用libtool或包裝腳本。

+0

謝謝:)這很有幫助 –

+0

這是行不通的。我在一個目錄中嘗試了'libtool e echo binary',並且直接打印運行它的'/ path/to/.libs/binary'並沒有給出預期的結果,'libtool e /path/to/.libs/binary '。似乎有更多的魔力比'回聲'和環境變量可以揭示。 –

+0

@PavelŠimerda:當然有更多的魔力。如果沒有,'libtool'將毫無意義!如果你想要調試'libtool e gdb binary'。不要使用'.libs'中的文件來處理任何嚴重的問題。但是如果你想探索...繼續,但要注意libtool是非常非常複雜的。 – rodrigo

相關問題