私はグローバルデバッグモジュールを実装しています。単一のモジュールにはCのすべてのグローバル変数を保持する構造体が含まれており、コードにはCモジュールとC++モジュールの両方が含まれています。既存の変数がどこかに設定されている場合、構造内のデバッググローバル変数も更新する方法はありますか?私はセッター関数を考えていましたが、これにはすべてのモジュールで変更が必要です。代わりに、CまたはC++を使用してJSFのvaluechangeeventなどの機能を複製する方法があります。
質問する
82 次
2 に答える
0
あなたはいくつかのプリプロセッサのトリックでそれを行うことができるかもしれません:
#ifdef DEBUG
#define myvar global_debug_thingy->myvar
#else
int myvar;
#endif
読み取りと書き込みに異なるコードが必要になるため、この方法でアクセサ関数やノーティファイアを実行できるとは思いません。プリプロセッサではこれを実行できません。
于 2012-10-25T18:46:06.147 に答える
0
デバッグモジュールに、監視している変数へのすべてのポインタを含めることができます。
struct debug {
int * pointer_to_var_1;
};
struct debug __debug__;
__debug__.pointer_to_var_1 = &var_1;
var_1
ここで、どこかで変更されたと仮定します__debug__
。アクセスすると、から直接確認できます。
*(__debug__.pointer_to_var_1) //This is up to date
それ以外の場合は、セッターを使用してモジュール内のすべてを変更するか、無限ループまたはタイマーを使用してすべての変数を監視する必要があります。Cでは値変更のイベント登録はありません。
于 2012-10-25T18:55:54.257 に答える