![どのプロセスがどのメモリアドレスに書き込みますか? [閉鎖]](https://linux33.com/image/68599/%E3%81%A9%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%8C%E3%81%A9%E3%81%AE%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AB%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
最近、私は職場(Ubuntu 14.04のC ++アプリケーション)でさまざまなメモリ関連の競合を目撃しました。私たちのアプリケーションは、独自のサードパーティライブラリを使用してリアルタイムデータと対話し、高度にマルチスレッド化されています。様々な場合、glibc は、「二重解放または破損」や「破損した二重接続リストの検出」などのエラーを吐き出します。これから回復したコアは、サードパーティのコード(頻繁に発生)と独自のコード(頻繁に発生しない)の両方で競合が発生することを示しています。統合機能は、各競合がnew
/malloc
またはdelete
/に対応することですfree
。
残念ながら、この環境ではデバッガのためのスペースはほとんどありません。これらのアプリケーションは速度に非常に敏感であり、環境のすべてがリアルタイムであるため、競合を再現しようとしたときにのみ入力データと動作環境を大まかに推定できます。
つまり、私の質問は次のようになります。どのプロセスのどの部分がメモリに触れてはならないかを正確に伝えるユーティリティは何ですか?競合は確実に再現できないため、プログラムで唯一のオプションはデータをキャプチャしてから競合が発生した後にチェックすることです。そのために私は見つけたああプロフィールそしてシステム教授しかし、これら2つのツールが仕事に適しているかどうかはわかりません。
質問が曖昧であることをお詫び申し上げます。