どのようにあなたは、dbxでメモリロケーションにブレークポイントを置くのですか?
-
20-08-2019 - |
質問
同僚があるため、いくつかの破損メモリの予測可能な方法で失敗したCプログラムを実施しています。彼は、それが破損の原因となるコードを特定するために割り当てられていたら、メモリ位置を監視するためにdbx
使用するようにしたいと思います。
これは可能ですか?もしそうなら、何が汚職の瞬間にブレークポイントを生成するための構文は次のとおりです。?
でない場合は、何が問題のこの種を固定する良い方法だろうか?
それは通常原因であるので、(私のいつもの戦術は、私が最近変更したものを見るためにソースコントロールを見ることである。しかし、それだけで今まで運で働いていたかのように問題のコードは聞こえるので、それはしません仕事も、私はすでにコードで働いたことがないのでによって犯人として自分を排除してきました; - 。。)
解決
は、より深く、それはのようなものであるdbx
の最近のバージョンで解決策を思わ見ました
stop access w <address>, <size>
<address>
とは<size>
表現をすることができますので、、あなたのようなコマンドを書くことができます:
stop access w &p, sizeof(int)
これはポインタであり、我々はそれが指す最初の単語を監視したいp
を前提としています。
私はまた、追跡に微細チュートリアルに渡って実行しましたメモリバグを踏み。それはgdb
ではなく<=>使用していますが、原則は同じである必要があります。
他のヒント
AIX上では、stophwpを使用したい:
(dbx) help stophwp
stophwp <address> <size>
Stop execution when the contents of the specified
memory region change. This is a accomplished in
hardware and may not be available on all models.
私はSolarisのdevのだありませんが、あなたはGDBとハードウェアブレークポイントでこれを行うことができます。
所属していません StackOverflow