2017-02-18 18 views
0

私はすべてのネットワークダンプIログを読み取り可能なデータとして出力したいと考えていました。ログに記録されたダンプを(memcpyを使用して)それぞれの構造体にマップし、print()関数自体を定義することなく、同じクラス値を印刷したいと考えています。すべてのクラスデータを印刷する方法はありますか

私は正しく覚えていればgdbを使っているQtデバッガを使って、ブレークポイントを使って値をファイルにコピーしたり、ファイルにコピーすることさえできます。アプリケーションがダンプを処理して読み込み可能なデータに変換するのに時間がかかることを考えれば、デバッグ情報をファイルにコピーするシステムを自動化することは可能でしょうか?

私は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-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? –

関連する問題