**A
別のポインター ( ) へのポインター ( ) があり*B
ます。プログラムのどこかB
が壊れています。ただし、 に格納する前B
に破損しています。は常に同じアドレスにあるとは限りません (は必ずしも同じではありません)。しかし、B は常に同じ値で破損しています (は常に同じです)。に格納される次の値を調べる破損検出ルーチンがあるため、これを知っています。そのため、既に破損している時点しかわかりません。*A
B
&B
B
*A
私が (もちろん) 望んでいるのB
は、破損している場所を見つけることです。
( ) を指すA
ものにウォッチポイントを自動的に生成するgdbウォッチポイントを既に試しました. .A
*A
B
*A
*A
*A
watch A
commands
silent
watch *A
commands
silent
if *A == magicalcorruptedvalue
where
end
end
end
しかし問題は、ハードウェア ウォッチポイントを使用すると、あまりにも多くの中間的なものが に保存される*A
ため、すぐにウォッチポイントが不足してしまうことです。スレッドではうまく機能しないため、ソフトウェア ウォッチポイントは試していません。
この時点で、唯一の解決策は、戻ってコードをより注意深く読むか (常にまともなオプションです)、より多くの単体テストを作成するか、割り当てられたすべてのメモリを継続的にスキャンしてこの値を探し続ける専用スレッドを作成することです。 .
ただし、この問題に遭遇したのは私が初めてではないと思います。この質問をより一般的に表現すると、次のようになります。
メタパラメータ:
Linux の場合
これは、マルチスレッド コールバック スタイルのアプリケーションにあります。