解決GDB輸出Qt內建類型的顯示問題

來源:互聯網
上載者:User

標籤:

自從GDB 7.0之後,就加入了Pretty-Printer的這個概念。簡單理解就是他可以讓你用Python寫一串指令碼,然後讓gdb去讀取這串指令碼後,可以自由的輸出由你想自己定義的格式。我們直接舉個簡單例子:

#include <QString>int main(int argc, char *argv[]){    QString a = "abc";    int i = 3;    return 0;}

在這裡我們想列印a的值,我們把斷點停到int i = 3上,然後p a可以看到下面的輸出

(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_printersregister_qt4_printers (None)endset print pretty 1

可以看到裡面調用了register_qt4_printers這個函數並完成了相關註冊,將下好的qt4.py放到.gdb中之後重新gdb來查看a的值

(gdb) p a$1 = "abc"

哈哈,大功告成,此時的QString變數也可以順利輸出了。

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才可以。

 

參考連結:http://blog.csdn.net/dbzhang800/article/details/6830638

                 http://nikosams.blogspot.com/2010/01/gdb-qt-pretty-printers-updated.html

解決GDB輸出Qt內建類型的顯示問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.