除錯時直接顯示QString的字元值(包含windows和linux)
阿新 • • 發佈:2019-01-29
在用Qt進行程式設計除錯的時候,總是要檢視Qt各類變數的值,遺憾的是,無論是windows的VisualStudio還是linux上的gdb,對Qt定義的資料型別等支援並不友好。例如,想要看到QString字元創的值,在windows上要在變數視窗點選好幾層才能看到,而在linux,用gdb列印的資訊根本無法讀取。
儲存後從新啟動VS,再進行除錯的時候,當滑鼠移動到QString變數的時候,就可以直接顯示字串內容了。
在網上參考了很多方法,終於找到了比較完美的解決方案,但是網上的文件一般僅針對一個作業系統。但是除錯Qt的跨平臺程式,一般都是要在很多平臺上除錯,最常用的就是Windows和Linux了,現在就Windows和Linux作業系統上進行除錯如何直接 顯示QString的值進行分別說明。當然聰明的小夥伴們還可以舉一反三,根據自己的需要實現其他Qt型別的顯示,或者更改自定義的資料結構的顯示。
Windows(測試環境 win7,Qt4, VisualStudi 2010)
開啟VS的安裝目錄,找到Common7\Packages\Debugger下面的autoexp.dat檔案,開啟->搜尋[Visualizer],在下面新增如下:; Qt4 QString{ preview ([$e.d->data,su]) stringview ([$e.d->data,sub]) children ( #( d: $c.d, [size]: $c.d->size, [referenced]: $c.d->ref._q_value ) ) }
儲存後從新啟動VS,再進行除錯的時候,當滑鼠移動到QString變數的時候,就可以直接顯示字串內容了。
Linux(測試環境:redhat 7.1)
在linux中可以使用gdb的擴充套件功能,用自定義巨集命令的方式實現。巨集定義如下:將上述巨集定義儲存到家目錄下的 .gdbinit檔案中,每次啟動gdb就能夠自動載入了,非常友好方便。如圖:define printqstring printf "(QString)0x%x (length=%i): \"",&$arg0,$arg0.d->size set $i=0 while $i < $arg0.d->size set $c=$arg0.d->data[$i++] if $c < 32 || $c > 127 printf "\\u0x%04x", $c else printf "%c", (char)$c end end printf "\"\n" end