歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

【Linux學習筆記八】Linux編程

【注】文章中的所有截圖均為centos下實驗結果,親測命令正確= ̄ω ̄=

【參考資料】《Linux從入門到精通(第2版)》劉憶智
等編著

1、編譯一個C程序 :以用vim寫成的summary.c為例






$ gcc summary.c
##編譯文件,生成名為 a.out 的可執行文件
$ ./a.out ##執行文件

$ gcc -o sum summary.c
##為編譯生成的可執行文件命名為sum

$ ./sum
##為編譯生成的可執行文件命名為sum




【轉載請注明文章出處:/content/9257539.html】

2、同編譯有關的選項
選項功能-c只激活預處理、編譯和匯編,生成擴展名為.o的目標代碼文件(編寫大型程序所必須)-S只激活預處理和編譯,生成擴展名.s的匯編代碼文件-E只激活預處理,並將結果輸出至標准輸出-g為調試程序(如gdb)生成相關信息 $ gcc -E summary.c > pre_sum ##將結果重定向輸出到文件中
3、編譯C++程序:g++

$ g++ -o hello hello.cpp ##與gcc用法基本一致

4、啟動調試(gdb)

$ gcc -g summary.c
##在調試之前,必須先用gcc -g命令生成帶有調試信息的可執行程序

$ gdb a.out ##對二進制文件a.out進行調試,提示符(gdb)等待接受用戶的指令





5、獲得幫助:gdb支持<Tab>的命令補全,和兩個<Tab>的命令列表(前邊提到過Shell的同樣功能),也支持縮寫,如help可以用h代替
(gdb) help ##顯示gdb的幫助信息
(gdb) help breakpoints ##進一步獲取和斷點有關的幫助信息




【轉載請注明文章出處:/content/9257539.html

6、查看源代碼
(gdb) list ##查看程序源代碼,每次顯示十行,回車繼續顯示,list可以簡寫成
l

(gdb) l 15 ##顯示第
15 行附近的 10 行代碼

(gdb) search int summary ##查找對應內容,回車繼續查找下一個(朝向文件尾)

(gdb) reverse-search Summary ##向相反方向搜索(朝向文件頭)

search和reverse-search支持使用正則表達式搜索。

























7、設置斷點
(gdb) break 10
##在第10行設置斷點

(gdb) break summary
##在summary()函數入口處設置斷點

(gdb) info break
##查看已經設置的斷點信息

(gdb) clear 10
##刪除該行斷點











8、運行程序和單步執行
如果CentOS不能正常運行如下命令,需要先進行如下配置:

$ cd/etc/yum.repos.d
$ sudo vim CentOS-Debuginfo.repo
##文件為只讀,需要用sudo打開修改

將enabled=0修改為enabled=1,保存退出。







$ sudo yum install yum-utils

$ sudo yum install nss-softokn-debuginfo --nogpgcheck
$ sudo yum install glibc

需要在ipv4下下載安裝。

$ sudo debuginfo-install glibc-2.17-106.el7_2.4.x86_64
##具體的版本號可以根據gdb下使用run命令失敗時的系統提示確定,此處如果不能完全安裝成功,可以使用以下兩條語句更新後再次安裝,便可以成功:

$ sudo yum makecache

$ sudo yum update
上述步驟安裝完成後,便可以正常使用調試命令了。如,在summary.c中第十行設置斷點後:

(gdb)run
##縮寫為 r,運行程序至斷點

(gdb)next
##縮寫為 n,單步執行,不進入函數內部

(gdb)n 2
##提供一個數字,連續執行 2 行

(gdb)continue
##縮寫為c,運行程序到下一個斷點





(gdb)step
##縮寫為s,單步執行,進入函數內部







【轉載請注明文章出處:/content/9257539.html




9、監視變量
如果CentOS不能正常運行如下命令,需要先進行如下配置:

(gdb) print sum
##縮寫為p,打印變量sum的值

(gdb) ##重復上一條命令
(gdb) watch sum ##每次使用print比較麻煩,可以用watch設置觀察點,每次sum發生變化,程序就會停下





10、臨時修改變量
程序運行時修改變量的值:

(gdb) set var i = 1
##將變量 i 的值修改為1





11、查看堆棧情況:bt






12、退出gdb
(gdb) quit
##縮寫為q,如果程序沒有運行完畢,會要求用戶確認




【轉載請注明文章出處:/content/9257539.html

13、常用gdb命令匯總
gdb命令縮寫描述helph獲取幫助信息listl顯示源代碼search向前(朝向文件尾)搜索源代碼reverse-search向後(朝向文件頭)搜索源代碼breakb設置斷點info break查看斷點信息clear清除當前所在行的斷點runr從頭運行程序至第一個斷點nextn單步執行(不進入函數體)steps單步執行(進入函數體)continuec從當前行繼續運行程序至下一個斷點printp打印變量的值watch設置觀察點set var variable=value設置變量variable的值為valuebt查看運行時棧quitq退出gdb
Copyright © Linux教程網 All Rights Reserved