rpm debuginfo包的作用

首先看一個例子

case1

main.c

#include <stdio.h>
	
int main()
{
	int a=1;
	int b=2;
	int c=0;
	c=a+b;
	printf("c=%d\n",c);
	return 0;
}

gcc main.c -o main
生成可執行文件./main
然後gdb一下,如下:
在這裏插入圖片描述
因爲,gcc默認是-O2選項,不含調試信息的,所以可以看到no debugging symbols found,沒有可調試的符號表加載進來。 文件(main.c)也找不到各個變量(a,b,c)也打印不了,都被優化掉了

case2

那麼我們用gcc -g -O0 main.c -o main再試一下。
在這裏插入圖片描述
gcc編譯時加了-g選項後,gdb就可以讀到調試用的符號表了並且文件(main.c)也可以找到變量(a,b,c)也都可以打印出來

case3

現在我們在上一步驟的基礎上,把main.c文件刪除,然後gdb一下。
在這裏插入圖片描述
gdb就可以讀到調試用的符號表了但是文件(main.c)找不到,即沒辦法在gdb裏看到源代碼了但是變量(a,b,c)還是可以打印出來

debuginfo包

看了前面的三個例子,我們現在來說說debuginfo包。
一般在linux上,編寫一個軟件後,都會用rpmbuild工具打包成rpm包,然後發給別人去部署。
rpm包裏一般就是有一些可執行文件,靜態庫或者動態庫,但是不包含源代碼。
那麼有時候爲了調試方便,還會同時生成相應的rpm debuginfo包,這樣就可以方便調試。只要客戶安裝了普通rpm包和相應版本的debuginfo包,就可以gdb調試了,如果上面說的case3,雖然看不到源代碼,但是可以打印相應的變量。

如何生成相應的debuginfo呢?

在相應的*.spec末尾加上

%debug_package

即可。

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