自從GDB 7.0以後,就加入了Pretty-Printer的這個概念。簡單理解就是他可讓你用Python寫一串腳本,而後讓gdb去讀取這串腳本後,能夠自由的輸出由你想本身定義的格式。咱們直接舉個簡單例子:html
#include <QString> int main(int argc, char *argv[]) { QString a = "abc"; int i = 3; return 0; }
在這裏咱們想打印a的值,咱們把斷點停到int i = 3上,而後p a能夠看到下面的輸出python
(gdb) p a $1 = {static null = {<No data fields>}, static shared_null = {ref = { _q_value = 2}, alloc = 0, size = 0, data = 0xb7fb14d2 <QString::shared_null+18>, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {_q_value = 1}, alloc = 0, size = 0, data = 0xb7fb14be <QString::shared_empty+18>, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0x804b008, static codecForCStrings = 0x0}
這個顯然不是咱們能夠接受的,因而google了一番,發現還真有關於Qt的Printer,其實就是個py文件,下下來以後咱們須要在咱們本身的.gdbinit上加入函數
python import sys sys.path.insert(0, '/home/rickyk/.gdb') from qt4 import register_qt4_printers register_qt4_printers (None) end set print pretty 1
能夠看到裏面調用了register_qt4_printers這個函數並完成了相關注冊,將下好的qt4.py放到.gdb中以後從新gdb來查看a的值google
(gdb) p a $1 = "abc"
哈哈,大功告成,此時的QString變量也能夠順利輸出了。spa
PS: 關於Qt Creator的Debug Helper和這篇文章的原理有點區別,Qt Creator採用的Debug技術只要是用了Python的dumper。由於兼容性的問題,Qt Creator要保證在絕大多數機器上均可以使用,因此gdb版本必須知足6.8.50才能支持支持Python腳本從而進行Pretty Printer,若是這樣的話就不能保證全部的機器均可以正確看到Qt內置變量。因此Qt Creator用了gdb比較通用的特性----Compiled Dumpers,因而乎,Qt Creator本身寫了一個Dumper專門用來配合Debug,這樣解決了平臺兼容性問題。固然了,目前不少Qt Creator安裝包裏都會自帶一個支持Python的gdb也是出於這方面的考慮,總之這兩套原理並不相同,也就是說,若是你想讓你的終端gdb正常輸出,你仍是得去配一套Printer才能夠。.net
參考連接:http://blog.csdn.net/dbzhang800/article/details/6830638code
http://nikosams.blogspot.com/2010/01/gdb-qt-pretty-printers-updated.htmlhtm