2

同僚の C プログラムが、破損したメモリのために予測可能な方法で失敗します。dbx彼は、破損の原因となっているコードを特定するために、割り当てられたメモリの場所を監視するために使用したいと考えています。

これは可能ですか?もしそうなら、破損の瞬間にブレークポイントを生成する構文は何ですか?

そうでない場合、この種の問題を修正するための良いアプローチは何でしょうか?

(私の通常の戦術は、ソース管理を調べて、最近変更したものを確認することです。これは通常、それが原因であるためです。しかし、問題のコードは、運によってのみ機能したかのように聞こえるため、機能しません。また、 、コードを使用したことがないため、私はすでに犯人として自分自身を排除しました.;-)

4

3 に答える 3

4

より深く調べてみると、最近のバージョンのソリューションは次のようになっdbxているようです。

stop access w <address>, <size>

<address>とは式である可能性があるため<size>、次のようなコマンドを記述できます。

stop access w &p, sizeof(int)

pこれは、がポインタであり、それが指す最初の単語を監視することを前提としています。

また、メモリのバグの追跡と踏みつけに関する優れたチュートリアルにも出くわしました。ではgdbなくを使用しますdbxが、原則は同じである必要があります。

于 2008-12-10T00:22:47.723 に答える
1

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.
于 2016-03-18T22:07:15.937 に答える
0

私は Solaris 開発者ではありませんが、gdb とハードウェア ブレークポイントでこれを行うことができます

于 2008-12-08T22:03:20.110 に答える