2015-12-15 77 views
0

我想在gdb中定義一個命令,它是一種包裝器,它將根據傳遞給它的參數的數據類型調用相應的方法。 我試過類似基於GDB中的數據類型調用/調用不同的方法

set $datatype = whatis $arg0 

但它似乎並不奏效。

我想寫這樣的事情

define gprint 

    set $datatype = //somehow get the datatype of arg 

    if $datatype == *type1 
     p print_type1(*$arg0) 
    end 
    if $datatype == type1 
     p print_type1($arg0) 
    end 
    if $datatype == type2 
     p $arg0->print() 
    end 

    // 
    // 
    // Some more datatypes 
    // 
    // 

end 

回答

1

有從gdb命令行執行此操作的便捷方式,因爲有走私類型到表達沒有什麼好辦法。

它可以通過使用「標準hack」的困難方式完成 - 使用「set logging」將類型寫入文件,然後使用「shell」將文件重寫爲gdb腳本,然後使用「source」加載該腳本。但是,這是非常痛苦的。

相反,使用Python更簡單。在這裏你有幾個選擇。

因爲它看起來像你想讓某些值的顯示因類型而異,所以我建議使用gdb「漂亮打印」功能。該功能專爲此場景而設計。它與printbt以及其他gdb命令很好地集成在一起。然而,如果你不這樣做,而且你還是寧願編寫自己的gprint命令,你仍然可以選擇:你可以完全用Python寫命令,它可以訪問表達式和類型。或者,你可以編寫你喜歡的Python便利函數。你可以在my gdb-helpers repository中看到後者的一個例子;尤其請參閱$_typeof函數。

相關問題