iT邦幫忙

DAY 2
2

emacs的30天學習筆記系列 第 2

emacs 做中學第二天

寫程式,不可缺少的就是debug,而gcc的好兄弟,就是gdb,在linux 界,當然也是超有名氣的另一歷史悠久的除錯軟體。gcc,最好,有一段時間是GNU C COMPLILER的縮寫,而後來,隨著時間的演變,及自由軟體的穿透力,或是感染力,愈來愈多語言gnu化了,C/C++/JAVA/FORTRAN/ADA...,
GCC就變成GNU COMPILER COLLECTION. 雖仍是gcc,但變成眾多語言的集合。而gdb也相應的變成眾多語言的除錯器。這和微軟上的大多數軟體,一個語言整合作業環境(ide)一個除錯器不太一樣。
有時候,你會覺得gcc 怎麼可以包山包海呢?每個語言差異那麼大?語言的本質是什麼呢?共用除錯器??
記得早期C++開發時,有一段時間,是把C++翻成相對應的C,因為GCC很大,還沒看它怎麼實作的,難道是把所有語言翻成相對應的C,這樣感覺C有點像低階語言了,當然以上純屬錯誤假設衍生的錯誤推論

又回到正文來,上圖是emacs開啟圖檔的貼圖,以這種陽春介面的文字編輯器,竟然可以開圖,
筆者是指和台灣之光的notepad++相比,不是和adobe 一類的超多功能ide相比。

從圖上,你可能會想,sqlite3和emacs有什麼關係,和gdb有什麼關係?

最近小女兒一直常考我腦筋急轉彎,相對於她的問題,筆者的題目簡單多了。
答案是,在emacs裏,用sqlite3來 練習gdb的一些除錯動作。

目前網路上的gdb,似乎用得範例稍微簡單,能了解其精神,但是忽略了很多細節,對像筆者
這樣其實不太用C語言,在日常工作不用gcc的業餘者,想深入探索一些東西。還真得有點
困難,卡住的地方,通常很微不足道。

首先,http://www.sqlite.org/download.html去sqlite3官網下載
程式碼。為什麼用sqlite3做為範例呢?常人的印象,應該是很多很多的**.c檔。
但是你解壓縮後,發現主要是兩個
.c檔,shell.c和sqlite3.c,兩個檔就可以
完成世界最小最快可移植性最高的嵌入式資料庫。當然,為了求更高的速度,開發團隊把
本來按模組分的上百個
.c**檔,併成一個幾萬行的sqlite3.c,兩個檔,我們甚至不用下很常的指令就可以除錯它。

進入 emacs, 用昨天的指令,
C-x C-f 開啟 ,sqlite3解壓縮目錄的shell.c
如筆者是**~\sqlite-autoconf-3070800\shell.c**
然後進入 編譯模式,esc-x 停一下,再輸入
compile
預設是秀make -k,當然我們仍然沒有寫makefile ,所以清掉,換上

gcc sqlite3.c -lpthread -ldl shell.c -g -o shell

重點是**-g**,這個選項加上去,才能gdb

然後,切換到 shell,用esc-x shell,
鍵入,gdb shell,這時的shell, 指得是把sqlite3.c 加上shell.c
打包成一個執行檔,叫做shell。
進入gdb 模式。

這時候可以定出你的中斷點,雖然,我們不是要除錯sqlite3, 但是gdb,可以讓我們理解
,動態的理解sqlite3的運作。

只是本系列的分享,重心放在web server,web service,fastcgi的實作,
雖然不可能不用database,但並不在這裏深入的分享database(sqlite3)。

有興趣的讀者,可以在這個前置作業,就自己感興趣的方向,來進行追蹤。

例如 sqlite3如何新增一個db檔。
sqlite3如何新增一個table。
sqlite3如何select一個table。

這時候,gdb像是一把刀子,

下定你要的中斷點,

一開始你可以下 l, 這是list的意思,你可參考洪老師的網頁
http://www.cis.nctu.edu.tw/~is93007/acd.htm
list , 就是一頁一頁看程式,選擇你有意思的地方。

break 函式名稱,或break 行數,是最常用的下中斷點。

下好中斷點。

run是開始跑起來。

再來會停在中斷點。

用next,一行一行的往下執行
step遇到呼叫函數,會進入函數

不耐煩了,一行一行太慢了,就用continue 到下一個中斷點

結論:年初到目前任職的公司,是用tiptop這套erp,有些報表程式要修改,
4gl 市面上的書不多,何況是4j這家法國公司的4gl 工具。
同仁有心的借我原廠的技術手冊,也沒講什麼入門,進階的程式,因為大家都很忙。
感謝他百忙中抽空教我DEBUG, 而4gl的debug指令,和gdb一模一樣,讓我
久而久之也習慣了。

不知道,各位在公司交接將離職同事的工作時,或是初入門一個新語言,會怎麼讓新人快速上手,因為這種經驗,筆者覺得,語言的使用,丟一本書,給同仁看,然後,如果仍沒有產能,就切入除錯模式,通常,同仁突然自己了解很多東西。然後會抱怨同仁為何不早教除錯,之後,愈來愈有默契,就直接教除錯,語言甚至也不用講了。反正一開始總是維護程式為主。等到要新寫一枝程式再說吧。


上一篇
emacs 做中學第一天
下一篇
emacs 做中學第三天(連續30天的GCC/GDB)
系列文
emacs的30天學習筆記38

尚未有邦友留言

立即登入留言