2016-03-30 57 views
0

我有遠程ARM Linux框,我需要調試。遠程gdb停止在每個事件

啓動服務器:

gdbserver :12345 ./my_app 

客戶端:

./arm-am3354-linux-gnueabihf-gdb ~/ 
(gdb) target remote dev_r:12345 
(gdb) continue 

然後我試圖暫停使用Ctrl + C的應用程序,但與GDB停止:

[用劣碼01退出的[劣等1(過程2766)]

而且在服務器上:

孩子退出,狀態1 GDBSERVER退出

故事: 我試圖在QtCreator使用遠程調試,但在運行時GDB設置斷點時以同樣的方式崩潰。此外,斷點和暫停在QtCreator中不起作用。 我正在嘗試另一個gdb,比如gdb-multiarch和android-sdk。

更新: 調試小程序又名Hello World的作品。本地調試(在x86上)也起作用。該應用程序本身擁有數十萬行代碼,共享和靜態庫。

部分解決方案: 可能是我得到的嵌入式平臺的系統根本無效。完成複印/ lib中/和/ usr /從目標設備並將其設置爲

set sysroot /home/karel/sysroot 

我能夠設置斷點和應用程序停止他們。但暫停仍然停止遠程應用程序。對於QtCreator也是如此:工具 - >選項 - >調試器 - > GDB->其他附加命令

+0

你需要什麼設備? http://www.ironlab.io允許在雲中的真實設備上進行調試。他們現在處於免費測試階段。 – Schultz9999

回答

0

我在調試在EGLFS平臺上運行的應用程序時遇到了類似的問題(甚至完全相同?使用Qt 5.4編譯時的調試工作非常好,使用Qt 5.5進行調試確實具有您所描述的功能。

經過數小時的搜索,我發現我的Qt 5.5應用程序在接收到SIGINT時退出,而在Qt 5.4上,調試器可以按預期暫停應用程序。由於GDB在嘗試暫停應用程序或設置/刪除斷點時發送SIGINT,這就是故障發生的地方。

經過一番研究,我終於找到了以下提交到Qt 5.5:Fix up signal handling in QFbVtHandler。最後,您會看到在收到SIGINT或SIGTERM時,將調用handleInt()處理程序,我們最終遇到_exit(1)。在那裏設置一個斷點確認了這正是試圖用GDB暫停或設置斷點時發生的情況。

爲我工作的解決方案:我已經爲qfbvthandler.cpp創建了一個補丁,只是刪除了#define VTH_ENABLED行。

GDB調試現在再次像魅力一樣工作。

注:即使qfbvthandler。cpp已經在Qt5.6及更高版本中更新,我懷疑這種行爲仍然是一樣的。然而,我沒有設置工作區來測試它。