使用gdbserver調試遠程庫文件

我的需求,有一個項目,程序由一個主程序和一堆動態庫組成,運行在目標機上,希望能夠在開發機上進行遠程調試。

於是想到了使用gdbserver來調試,中間碰到一些問題,記錄下來

1.demo程序

創建了一個demo程序來模擬,由主程序和動態庫兩個文件夾,開發機上的目錄結構如下

--proj

|---exemain

----exemain.cpp

----|Debug

----|----exemain

|---dlla

----dlla.cpp

----|Debug

----|---libdlla.so

其中exemain調用dlla裏的函數mymax

將可執行文件exemain和libdlla.so拷貝到目標機上,確認可以執行

2.目標機上使用gdbserver

在目標機上執行gdbserver :1234 ./exemain  其中1234是端口號

3.在開發機上調試

#cd proj/exemain/Debug

#gdb -q ./exemain

(gdb) target remote 172.103.1.59:1234

(gdb) b main

(gdb) c

(gdb) i shared

(gdb) set solib-search-path ../../dlla/Debug/

(gdb) b mymax


尤其需要注意的是,先在mian處打斷點,並且運行到main之後再去設置solib-search-path ,然後再在dlla中的函數上打斷點,否則顯示的斷點並沒有源文件行數,推測大概是隻有運行進了main之後纔會發現dlla庫並加載,使用set solib-search-path時纔會加載符號和源文件行號,再去打斷點才能找到。

4.使用eclipse

目前使用eclipse也存在問題,如果直接使用遠程調試的話還是無法進入庫文件的源文件中調試,需要在終端中手動輸入。

5.在之前gdb成功的基礎上具體說一下eclipse怎麼配置

工作空間設在proj下,下面有兩個項目dlla和exemain。

選中exemain,選擇調試下面的調試-配置

雙擊c/c++ remote application會出現遠程調試的設置選項,

填寫名稱

connection後新建,選ssh only,下一步填寫主機名,連接名,下一步

選擇c/c++程序後面的搜索項目,選中debug/exemain

在remote absolute file path for c/c++ application後面的瀏覽中,選中目標機上的可執行文件,需要填寫目標機的用戶名密碼

然後點應用,就可以調試了

但是在調試中還是隻能在exemain工程中打斷點。如果要在dlla上打斷點,需要在gdb終端中手工輸入

set solib-search-path ../../dlla/Debug/

然後輸入b mymax

再就可以用eclipse調試了

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章