この質問は、this one I asked earlier this weekに多少関連しています。私はまだC + +のコードを正しく反映することができないことに対処しています。今、私は何らかの形でこの機能を追加しようとしているいくつかのライブラリに出くわしていますが、もっと容易に利用できる、広く使われている(実装が簡単な)メソッドを使って、私がしなければならないことを尋ねたいと思います。反射代替としてC++デバッガを使用する
私が必要とするのは、基本的に、特定の時点におけるオブジェクトインスタンスのスナップショットです。それらはサブオブジェクト(すなわち、オブジェクトが1つ以上の他のオブジェクトを「有する」いくつかの構造)を有することができるが、基本的にそれである。現在、リフレクションは明らかな選択肢のように見えますが、プロジェクトが常にC++でコーディングされているため、これはかなり除外されています。しかし、デバッガは私が必要とするだけで(ある時点でプログラムを停止し、現在メモリにあるインスタンスについて教えて)いるように思えるので、単純なデバッグ技術を使って何らかの情報抽出を実現できるはずです。与えられたプロジェクトのコードが利用可能であると仮定することができます。私のプログラム内のワークフローは、デバッグモードで
- コンパイルC++コード
- デバッガを作成し、添付し
- セットブレークポイント(私は必要なすべてのインスタンスが作成されていることを示しているメソッド呼び出しを知っているように) ようになります。
- ランとインスタンス(サブインスタンス)をチェックし、特定のクラス(およびその継承タイプ)の、これは私は通常、基本的であるが、さらなる処理のため
この情報を抽出しますデバッグ中に他のプログラムの中から自動的にこれを行う方法に関する情報を見つけることができませんでした。これにより、ライブラリやコードの変更がなくても、限定されたリフレクションを実現できるという利点があります。ですから、JavaソリューションであるC#やC++で、VSソリューションをロードしてコンパイルしたり、メイクファイルを実行して上記の手順を実行したりする方法がありますか?私は、デバッガの使い方を教えてくれる多くのページを見つけ出していますが、実際にはここでは役に立たないのです...
ありがとうございました。
なぜあなたはリフレクションの泣き声が必要な場合は、まだC + +を使用していますか?リフレクションを提供する言語を使用してみませんか? –
@Alexandre:私は大好きです。この仕事にはC++が間違った言葉であると私が思っていることを知らない同僚はいません。それでも、SystemCで書かれたシステム設計を分析することが目的です。そしてSystemCはC++ライブラリなので、これは石で設定されています。私はそれに対処する必要があります: - /。 – Jay
私は、使用されているライブラリによっていくつかの内部APIをさらに使用してきました。また、MS DIA SDKを使用しています。現時点で必要な実行時情報を実際に取得できるかどうかはまだ分かりませんが、これは主にライブラリのAPIでカバーされているようです。最も重要なことに、DIA SDKは、あらゆる種類のタイプ情報(メソッド、フィールド、ベースクラスなど)へのアクセスを提供します。これは、私が探していたリフレクション機能の大きな部分です。 MSDN http://www.developerfusion.com/article/84368/debugging-with-the-dia-sdk/に加えて、ちょうどその場合の素晴らしいスタートです。 – Jay