どのようにあなたは、dbxでメモリロケーションにブレークポイントを置くのですか?

StackOverflow https://stackoverflow.com/questions/351052

質問

同僚があるため、いくつかの破損メモリの予測可能な方法で失敗した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とハードウェアブレークポイントでこれを行うことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top