天天看點

關于紅帽8以後倉庫中debugsource軟體包一些了解

作者:這個人不愛說話

一、 debugsource的來源

在調試任何可執行代碼時,兩種類型的資訊允許程式員通過工具和擴充來了解二進制代碼:

● 源代碼文本

● 源代碼文本如何與二進制代碼相關的描述

此類資訊稱為調試資訊。

在Red Hat Enterprise Linux 7 中,debuginfo 軟體包包含這兩種類型的資訊。Red Hat Enterprise Linux 8 将調試資訊所需的源代碼資料從 debuginfo 軟體包分割為單獨的 debugsource 軟體包。是以産生了兩種類型軟體包用于調試:

Debuginfo 軟體包

debuginfo 軟體包提供為二進制代碼功能提供的人類可讀名稱所需的調試資訊。這些軟體包包含 .debug 檔案,其中包含 DWARF 調試資訊。這些檔案被安裝到 /usr/lib/debug 目錄中。

Debugsource 軟體包

debugsource 軟體包包含用于編譯二進制代碼的源檔案。分别安裝了 debuginfo 和 debugsource 軟體包後,GDB 或 LLDB 等調試程式可以将二進制代碼的執行與源代碼相關聯。源代碼檔案被安裝到 /usr/src/debug 目錄中。

二、 debugsource的包含内容

debugsource 軟體包包含用于編譯二進制代碼的源檔案。如果後續有代碼修複更新檔或自研功能更新檔,同樣會在這個軟體封包件中可見。

三、 debugsource的使用

1. 通過含有debugsource的庫安裝(會同時安裝debuginfo和debugsource):

a. 安裝用于調試的工具:

yum install gdb            

b. 安裝 yum-utils 軟體包以使用 debuginfo-install 工具:

yum install yum-utils           

c. 啟動連接配接到要調試的應用程式或庫的 GDB。GDB 自動識别缺少的調試資訊,并建議要運作的指令:

[root@localhost ~]# gdb -q /bin/ls
Reading symbols from /bin/ls...Reading symbols from .gnu_debugdata for /usr/bin/ls...(no debugging symbols found)...done.
(no debugging symbols found)...done.
Missing separate debuginfos, use: yum debuginfo-install coreutils-8.30-12.el8.x86_64
(gdb) 
           

d. 退出 GDB:輸入 q 并使用 Enter 進行确認:

(gdb) q           

e. 運作 GDB 建議的指令來安裝所需的 debuginfo 軟體包:

yum debuginfo-install coreutils-8.30-12.el8.x86_64           

2. 通過rpm安裝:

a. 查找應用程式或庫的可執行檔案:

使用 which 查找應用程式檔案。

$ which less
/usr/bin/less           

b. 使用 locate 指令查找庫檔案。

$ locate libz | grep so
/usr/lib64/libz.so.1
/usr/lib64/libz.so.1.2.11           

如果調試的最初原因包含錯誤消息,請選擇庫的檔案名中與錯誤消息中提及的具有相同的額外數字的結果。若有疑問,請使用檔案名不包含其他數字的結果來嘗試遵循該流程的其餘部分。locate指令由 mlocate 軟體包提供,要安裝并啟用它。

c. 搜尋提供該檔案的軟體包的名稱和版本:

$ rpm -qf /usr/lib64/libz.so.1.2.7
zlib-1.2.11-10.el8.x86_64           

d. 找到對應的版本debuginfo或debugsource軟體包,通過以下指令安裝:

rpm -ivh http://***/**debuginfo*.x86_64.rpm
rpm -ivh http://***/**debugsource*.x86_64.rpm           

通過rpm安裝時,可以單獨安裝debuginfo或debugsource軟體包

四、 debugsource的作用

當安裝debuginfo和debugsource軟體包時,通過gdb調試指令list可以檢視調試的指令或者庫對應的源碼:

關于紅帽8以後倉庫中debugsource軟體包一些了解

當僅安裝debuginfo,不安裝debugsource軟體包時,無法通過gdb調試指令list檢視調試的指令或者庫對應的源碼:

關于紅帽8以後倉庫中debugsource軟體包一些了解

是以,對于需要根據源碼,添加斷點的程式調試過程,安裝debugsource軟體包,是有必要的。

參考

紅帽官方文檔:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/developing_c_and_cpp_applications_in_rhel_8/index

繼續閱讀