私が実際にやっていることは、ウォッチポイントを1ビットの設定またはクリアに設定しようとしていることです。ビットを含むワードにウォッチポイントを設定して、それを* word &マスク(設定の場合は&のマスク)で条件付きにすることで行います。gdbのウォッチポイントの古い値と新しい値へのプログラムによるアクセス
問題は、他のビット同じ単語の中で変更されてもよく、条件はすでに一致する可能性があります。私が古い値と新しい値を持っていれば、($ old^$ new)&マスクという条件を設定できます。
私はpython gdb.Breakpointクラスを見ましたが、この情報も受信していないようです。
私は夢中になり、* wordの値が変わるたびに現在の値を記録するコマンドリストを設定し、それを$ oldとして使用するとします。しかし、私はこれを使っている時間の半分、実際にはrrを使っているので、私は後方に行くかもしれません。
私は、最初の行に '++ depth 'があり、最後に' --depth'(void関数、それ以外の戻り値なし)を持つ関数を持っています。私は、この関数の開始時と終了時にPythonコード( 'gdb.Breakpoint'のサブクラス)を実行したいと思います。関数が返すブレークポイントを設定するためのトリック(https://stackoverflow.com/questions/3649468/)は私にとってはうまくいかなかったので、変数「depth」にウォッチポイントを設定することが効果的かもしれないと思いました私は '++ depth 'と' --depth'(function enterとexit)を区別できません。いくつかの回避策がありますか? – ShreevatsaR
私は、関数beginでブレークポイントと深度変数でウォッチポイントの両方を設定し、これらのいずれかがトリガされたすべての時間を記録するグローバル状態(基本的にスタック)を維持するトリックを見つけました。関数ブレークポイントでは '('をスタック上に押し、ウォッチポイントでは最後のトリガーが関数であればスタックに '|'を押してください。あなたがそれを終了していることを知っているなど)しかし、私はそれほど狂っていないものが存在すると想像します。 – ShreevatsaR