背景介紹:
libgdb過時了,目前的GDB調試前端都不用libgdb
目前有兩種比較流行:
- MI接口,現在應該是MI II接口,是Eclipse CDT所采用的方式
- emac輸出接口,這個似乎有更多的調試前端所采用,例如DDD,kdbg,codeblocks等等
另外還有一種比較另類的一種方式:insight,直接把gdb給包含進去了
MI不但包括了CLI的所有命令,還具備一些CLI所不提供的功能,也就是說MI的命令一般與gdb的命令有一個映射的關系。當然,MI接口的設計初衷是面向將 GDB作為系統組件之一的復雜系統。在類似於DDD,Insight等以GDB為后端(backend)的GUI debugger的實現中,就是充分利用了GDB MI接口。MI最大的不足在於其輸出的文本流接口比較復雜,必須很熟悉其輸出格式才能理解,不如CLI輸出直觀。
MI(翻譯為Machine Interface)。因為最近在用Eclipse的CDT調試C/C++,當然Eclipse本質gdb的調用,對於gdb的命令很多人可能都已經很熟悉了,本文介紹的mi層命令可能很少有人用到,它也是gdb的一部分,主要目的是為一些目標系統如IDE等提供調試功能,如eclipse下c/c++的cdt插件的底層就是調用的mi層命令,cdt的包里面有兩個類RxThread,TxThread就是一個發送mi命令,一個接收返回數據的,大家有興趣可以研究下。
進入命令 gdb --interpreter mi [exec_file]
退出命令 quit
mi的命令總共分為以下幾個部分:
1.斷點(Breakpoint)
2.程序環境(Program Context)
3.線程(Thread)
4.程序執行(Program Execution)
5.棧(Stack)
6.變量(Variable)
7.數據(Data)
8.跟蹤點(Tracepoint)
9.符號(Symbol)
10.文件(File)
11.目標數據(Target Manipulation)
12.其它雜項
像我們在Eclipse 的console上見到的-var-evaluate-expression,-stack-list-locals,-exec-continue 諸如此類的都是mi的命令。
references:
http://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_211.html#SEC216
http://jlspyaozhongkai.blog.163.com/blog/static/116057464200995103415205/
http://blog.csdn.net/coutcin/article/details/1074330 (一些mi命令詳解可以參考這里)
http://www.ibm.com/developerworks/cn/opensource/os-eclipse-cdt-debug1/
http://www.ibm.com/developerworks/cn/opensource/os-eclipse-cdt-debug2/