2011-06-10 174 views
0

我正在使用Eclipse開發和遠程調試ARM處理器的某些軟件。不幸的是我寫的軟件是多線程的,我無法調試它。如果我把一個破發點中的線程代碼,我得到以下信息:使用GDB遠程調試多線程C程序

Child terminated with signal = 5

Child terminated with signal = 0x5

GDBserver exiting

做相當多的谷歌搜索後,我發現了一個「解決方案「這提出了利用這一點:

strip --strip-debug libpthread.so.0

不幸的是,我仍然得到終止錯誤。

我真的很感激你的幫助,讓這個想通了!

謝謝!

+0

我不確定這是否與多線程有關,因爲通常用gdb調試它通常工作正常。你怎麼稱呼strip命令。 cc1.exe和gcc.exe前綴很奇怪。我會在bash中調用一個正常的命令。 – dmeister 2011-06-10 13:50:55

+0

@dmeister這是我找到「解決方案」的網站[http://sourceware.org/bugzilla/show_bug.cgi?id=8963](http://sourceware.org/bugzilla/show_bug.cgi?id= 8963) 我調用它的方式是在eclipse中的C builder的其他標誌部分中添加了以下內容:調用爲: 'arm-none-linux-gnueabi-gcc.exe -O0 -g3 -Wall -c -fmessage-length = 0 strip --strip-debug libpthread.so.0' – avivas 2011-06-10 14:01:45

+0

你可以嘗試它作爲一個單獨的調用,而不是將其添加到構建器中。請注意,這可能需要root權限,因爲它會更改系統文件(lbpthread.so.0)。 – dmeister 2011-06-10 14:41:34

回答

1

首先,此(和隨後的)錯誤(或多個):

cc1.exe: error: unrecognized command line option "-fstrip-debug" 

通過加入strip --strip-debug等,以在GCC命令行引起的。那就是明顯是虛假的事情,而且根本就不是你的谷歌搜索建議。 (您可能要清理你的問題,除去這些錯誤的引用。他們什麼都沒有做與你的問題)

它所(或應該)建議,使用strip --strip-debug libpthread.so.0代替使用strip libpthread.so.0

這是因爲GDB無法使用線程如果您的libpthread.so.0被完全剝離。

它可以被除去調試符號(這就是strip --strip-debug libpthread.so.0所做的),但是剝離所有符號(這就是strip libpthread.so.0所做的)是一個壞主意(TM)。

既然你(顯然)不是你自己建造libpthread.so.0,你不應該剝奪它。

應該但是驗證你的工具鏈的提供者沒有把它搞砸。下面的命令不應該報告no symbols,並應在實際上打印匹配nptl_version(作爲定義符號):

nm /path/to/target/libpthread.so.0 | grep nptl_version 

假設一切都很好,到目前爲止,我們現在可以診斷你的問題,但...你沒沒有提供足夠的信息;(尤其是,當你運行GDB時,它應該打印一些類似using /path/to/libthread_db.so.0的東西。你可能不得不在Eclipse中尋找GDB控制檯,或者你可能想從命令行運行GDB,它打印

libthread_db.so.0(對於主機)的版本與lipthread.so.0(對於目標)的版本匹配是至關重要的,它們都應該提供d由您的工具鏈供應商提供。

你的問題很可能是GDB根本找不到libthread_db.so.0,或者它找到了錯誤的一個。

+0

感謝您提供此信息,當運行命令'nm /path/to/target/libpthread.so.0 | grep nptl_version'我的目標是:'00011468 r nptl_version' 我嘗試從命令行運行gdb,但它不打印'using/path/libpthread_db_so.0',它只打印以下內容: 'Process /創建root/tempSensor; PID = 988 偵聽端口2345 遠程調試從主機192.168.34.37' 和主機打印: '(GDB)使用192.168.34.100:2345 0x00008110目標遠程192.168.34.100:2345 遠程調試?? () (gdb)' – avivas 2011-06-13 12:55:33

+0

如果我現在從Eclipse運行它,我得到以下錯誤:'gdb:初始化thread_db庫時出錯' – avivas 2011-06-13 13:01:59