有時gdb會爲某些類型的變量打印「不完整類型」。這意味着什麼?我們如何看待這種價值?如何在gdb中打印<incomplete type>變量
41
A
回答
28
這意味着該變量的類型未完整指定。例如:
struct hatstand;
struct hatstand *foo;
GDB知道foo
是一個指向hatstand
結構,但是結構的成員沒有被定義。因此,「不完整的類型」。
要打印該值,可以將其轉換爲兼容類型。
例如,如果你知道foo
真的是一個指向lampshade
結構:
print (struct lampshade *)foo
或者,你可以打印作爲一種通用的指針,或把它當作好像它是一個整數
print (void *)foo
print (int)foo
參見這些網頁從GDB手冊:
5
什麼我發現是,如果你拆開使用不完整的結構類型gdb的一個功能「發現」的結構成員,並隨後顯示它們。例如,假設你有一個字符串結構:
struct my_string {
char * _string,
int _size
} ;
一些函數來創建並獲得通過指針字符串:
my_string * create_string(const char *) {...}
const char * get_string(my_string *){...}
和測試,創建一個字符串:
int main(int argc, char *argv[]) {
my_string *str = create_string("Hello World!") ;
printf("String value: %s\n", get_string(str)) ;
...
}
在gdb中運行它並嘗試'print * str',你會得到一個'不完整類型'的響應。但是,嘗試'反彙編get_string',然後'打印* str',它會正確顯示結構和值。我不知道爲什麼這個工作,但它確實。
0
我有同樣的問題。如果您從庫手動加載符號:
set auto-solib-add off
attach thread_id
shared any_lib
shared another_lib
您需要加載從庫,其中該對象被聲明,使用相同的命令,以及符號。
0
我不知道錯誤的全部含義,但正如彼得指出的那樣,反彙編相關方法會使某些類型定義可用。
我的例子:
在.H一類,該類包括內部輔助類的前向聲明,使得外類可以包含一個指向它的指針。相應的.cpp具有完整的內部幫助器類定義。
在突破外部類的方法時,gdb報告了通過外部類的實例取消引用內部類實例的指針的不完整類型。
在外部類中的某個方法上發出disasemble命令,gdb可以使用與先前失敗相同的指針來理解內部類的結構。
相關問題
- 1. golang gdb - 打印變量
- 2. 在GDB中打印多個變量?
- 3. 在GDB中打印裝配體變量
- 4. 如何在GDB中打印#defined常量?
- 5. 打印在GDB
- 6. 如何在gdb中打印Java數組?
- 7. 轉:使用gdb打印變量
- 8. 如何在gdb的特定條件下打印變量?
- 9. GDB如何打印矢量<bool>值
- 10. 如何在gdb中打印wstring
- 11. 如何在GDB中打印Fortran數組?
- 12. 如何在gdb中打印std :: map值
- 13. 如何在gdb中打印-0x4(%rbp)?
- 14. 在GDB中如何打印0xc(%rsp)?
- 15. 如何使用GDB控制檯打印鏈接變量?
- 16. Gdb,如何使用打印?
- 17. gdb可以在每次中斷時打印特定變量嗎?
- 18. 在調試msp430時打印GDB中的變量值
- 19. 如何在QMessageBox中打印變量值?
- 20. 如何在gmlp中打印變量
- 21. 如何在結構中打印變量?
- 22. 如何在Xcode中打印變量
- 23. 如何在GDB中打印C++向量的元素?
- 24. 如何打印變量值?
- 25. 如何打印變量
- 26. 如何打印$ rootScope變量?
- 27. 打印的結構陣列變量的值在GDB
- 28. gdb:打印一個不在當前範圍內的變量
- 29. 如何在「」內打印變量?
- 30. 如何打印變量在Perl
不錯的答案,雖然鏈接是404。 – 2009-12-07 10:42:28