使用GDB機器接口,是否有一種方法可以獲取特定變量的基本類型?例如,如果我有一個類型爲uint32_t(來自types.h)的變量,有沒有辦法讓GDB告訴我該變量的基本類型是unsigned long int,或者uint32_t是typedef'ed一個unsigned long int?如何使用GDB/MI獲取變量的基本類型
1
A
回答
8
您可以使用 「頭朝下」 命令
假設你有
typedef unsigned char BYTE;
BYTE var;
(gdb)whatis var
type = BYTE
(gdb)whatis BYTE
BYTE = unsigned char
0
我知道很少GDB/MI;下面的黑客使用python來避開MI,同時可以從MI'-interpreter-exec'命令中調用。可能不是你想象的。
我在MI文檔中沒有看到任何明顯的東西-var-info-type看起來沒有做你想做的事情,這和bug 8143類似(或者如果bug 8143被實現,我應該說可能) :
http://sourceware.org/bugzilla/show_bug.cgi?id=8143
第1部分:執行一個命令,做你在Python想要什麼。
# TODO figure out how to do this without parsing the the normal gdb type = output
class basetype (gdb.Command):
"""prints the base type of expr"""
def __init__ (self):
super (basetype, self).__init__ ("basetype", gdb.COMMAND_OBSCURE);
def call_recursively_until_arg_eq_ret(self, arg):
x = arg.replace('type = ', "")
x = gdb.execute("whatis " + x, to_string=True)
if arg != x:
x = self.call_recursively_until_arg_eq_ret(x).replace('type = ', "")
return x
def invoke (self, arg, from_tty):
gdb.execute("ptype " + self.call_recursively_until_arg_eq_ret('type = ' + arg).replace('type = ', ""))
basetype()
第2部分:使用控制檯解釋
source ~/git/misc-gdb-stuff/misc_gdb/base_type.py
&"source ~/git/misc-gdb-stuff/misc_gdb/base_type.py\n"
^done
-interpreter-exec console "basetype y"
~"type = union foo_t {\n"
~" int foo;\n"
~" char *y;\n"
~"}\n"
^done
-interpreter-exec console "whatis y"
~"type = foo\n"
^done
第3部分執行:
通知的第2部分所有輸出的限制將會stdout流。如果這是不可接受的,你可以從gdb中打開第二個輸出通道用於你的界面,並用python寫入。使用扭曲矩陣或文件。
這裏是一個使用扭曲矩陣的例子,你只需要將它切換到指定'basetype'輸出的位置就可以。 https://gitorious.org/misc-gdb-stuff/misc-gdb-stuff/blobs/master/misc_gdb/twisted_gdb.py
否則,你可以解析stdout流我想,無論哪種方式其黑客入侵。 希望有所幫助。
相關問題
- 1. 如何基本類型獲取存儲在asp.net會話變量
- 2. 如何獲取變量類型?
- 3. 如何在Java中獲取類型變量的類型泛型
- 4. 如何從類型變量中獲取ClassLoader(用於使用泛型來分類)
- 5. 如何獲取任何類型集變量的元素數量?
- 6. 如何選擇使用基於變量類型的方法
- 7. C#獲取基於枚舉值的公共變量的類型
- 8. 如何用Golang獲取同一類型的另一個變量的新變量
- 9. gettype()返回基於變量類型的類型 - 如何根據內容獲取類型?
- 10. 獲取鍵盤類型的變量
- 11. 獲取Kotlin中變量的類型
- 12. 獲取變量類型的AutoHotkey
- 13. 在MySQL中獲取變量的類型
- 14. 獲取不同類型的變量
- 15. 獲取的模板類型的基本類型(除去常量/參考/等)
- 16. 使用self獲取類中的變量?
- 17. 基於文本獲取節點類型
- 18. cxf jax-rs:如何獲取編組爲XML的基本類型?
- 19. 如何在gdb中獲取結構的基本數據類型
- 20. 如何使用變量作爲類型?
- 21. Delphi:如何使用TShiftState類型變量?
- 22. 如何使用變量作爲類型
- 23. 如何使用PHP獲取基本URL?
- 24. 如何獲取描述基類型數組的類型?
- 25. 如何獲取基類的泛型類型參數?
- 26. 使用powershell從參數獲取變量的類型
- 27. 如何在MATLAB中獲取變量的類型?
- 28. 如何獲取數據類型變量的值?
- 29. 如何獲取Object類型的環境變量?
- 30. 如何獲取swift中的變量類型
FWIW,通常稱爲「基本類型」,而不是「基本類型」AFAIK。對不起,沒有答案。 –
Quibble:'uint32_t'來自''或''。 –