2017-02-18 82 views
0

所以我想打印所有的網絡轉儲我日誌的可讀性數據。我已成功將日誌轉儲映射到它們各自的結構(使用memcpy),現在希望打印相同的類值(本身不定義print()函數)。有沒有辦法打印所有類數據

使用Qt調試器(如果我沒記錯的話,它使用gdb的),我可以使用斷點看到,甚至值複製到文件中。考慮到應用程序可能需要一些時間來處理並將轉儲轉換爲可讀數據,我是否可以自動將調試信息複製到文件中?

我已經通過gdb的文檔不見了,找不到了相同的任何功能。大多數在線解決方案都包括爲每個班級創建一個print()函數。

問題與How to get all properties/variables of a class at runtime/dynamically in C++不同: 該問題詢問如何獲取可變數據類型@ runtime。另一方面,我在編譯過程中定義數據類型(包含所有結構信息的* .h頭文件中,甚至將所有值映射到變量)。這個問題很大程度上是圍繞着可以通過調試器查看數據進行打印的事實而展開的;我希望自動顯示和複製到文件/控制檯上。

+0

的可能的複製[如何獲得所有屬性/在運行/動態在C++類的變量(http://stackoverflow.com/questions/4017708/how-to-get-all-properties-variables-of -a-class-at-runtime-dynamic-in-c) – jpo38

+0

查看上面的鏈接文章。由於無法從類中獲取屬性列表,因此將無法打印它們! – jpo38

+0

您正在尋找系列化。看看http://www.boost.org/doc/libs/1_63_0/libs/serialization/doc/。要注意的是,這與C#或Java沒有什麼可比性,它們在語言中有內置的反射。 –

回答

-1

傾倒的原始目的是爲得到一個char指向對象,並且只要打印數據作爲對象的大小一樣容易。它顯然不能訪​​問存儲在指針中的數據,只能訪問它們的地址。

既然你準備採取memcpy輸出格式,下面是同樣的一些代碼:

struct large_object fi; 
... 
char* pt = (char*)&fi; 

for (size_t i = 0; i < sizeof(fi); ++i) 
{ 
    printf("%1x", *(pt + i)); 
} 
printf("\n"); 

如果需要,你可以得到逐位輸出也,在加入另一個循環:

for (int bit_to_print = sizeof(char)-1; bit_to_print < 0; --bit_to_print) 
    { 
     printf("%d", *(pt + i) & (1 << bit_to_print); 
    } 

PS:內部循環在小端和大端系統上不會相同。

+0

爲什麼downvote? –

相關問題