問題タブ [watchpoint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - gdb のブレークポイントの後にソフトウェア ウォッチポイントを追加する方法
特定の構造体のさまざまなインスタンスを有効期間中に割り当てて解放する C プログラムをデバッグしようとしています。ある時点で、これらのインスタンスの 1 つが破損しています。
それをデバッグするには、これらの構造が割り当てられた直後にウォッチポイントを設定し、解放される直前にウォッチポイントを削除したいと思います。そのために、gdb.Breakpoint
:BreakpointAlloc()
とBreakpointFree()
. 前者stop()
には割り当てられた構造体にウォッチポイントを追加するメソッドがあり、後者にはstop()
ウォッチポイントを削除するメソッドがあります。(ウォッチポイントは、割り当てられたインスタンスのアドレスを含む文字列によってインデックス付けされた dict に保持されます。)
多数のインスタンスが割り当てられているため (100 以上)、ハードウェア ウォッチポイントを使用できません。ただし、ソフトウェア ウォッチポイントを (最初に を実行してgdb.execute("set can-use-hw-watchpoints 0")
) 使用すると、プログラムが動かなくなったように見え、何が起こっているのかわかりません。
gdb python API のドキュメントでは、私が行っていることを行うべきではないと示唆しています。プログラムがウェッジしている理由を説明できると思います:
関数: Breakpoint.stop ( self )
...
Inferior の実行状態 (つまり、step、next など) を変更したり、現在のフレーム コンテキストを変更したり (つまり、現在のアクティブ フレームを変更したり)、ブレークポイントを変更、追加、または削除したりしないでください。
ドキュメントを考慮して、停止イベントを介してウォッチポイントを追加/削除するようにプログラムを変更しようとしました(以下を参照)。ソフトウェア ウォッチポイントを使用すると、同じ問題が発生します。プログラムがウェッジしているように見えます。
ブレークポイントからウォッチポイントを操作する方法についてのアイデアはありますか?
(または、この問題をデバッグする方法に関する他のアイデアはありますか?)