1. 程式人生 > >除錯時直接顯示QString的字元值(包含windows和linux)

除錯時直接顯示QString的字元值(包含windows和linux)

在用Qt進行程式設計除錯的時候,總是要檢視Qt各類變數的值,遺憾的是,無論是windows的VisualStudio還是linux上的gdb,對Qt定義的資料型別等支援並不友好。例如,想要看到QString字元創的值,在windows上要在變數視窗點選好幾層才能看到,而在linux,用gdb列印的資訊根本無法讀取。

在網上參考了很多方法,終於找到了比較完美的解決方案,但是網上的文件一般僅針對一個作業系統。但是除錯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的擴充套件功能,用自定義巨集命令的方式實現。巨集定義如下:
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 
將上述巨集定義儲存到家目錄下的 .gdbinit檔案中,每次啟動gdb就能夠自動載入了,非常友好方便。如圖: