質問

あお願いしますツールのためのスポッティング、メモリ破壊を生産マルチスレッドのサーバを構築c++の下linux x86_64?私は現在、以下の問題:人間の私のサーバのクラッシュとsegfaultのコアダンプするエラーが起きmalloc/calloc排ガス-排水中のメモリが破損しているか。

実際にいったツールになります。ここでは私の経験か

  • Valgrindは(たといっても東京やワシントンd.c.のツールが遅くなるサーバすぎで使用できます。かるとステージ上のサーバと言って頂けたことがありまで、ティーチング-アシスタントメモリ関連の問題が出来上がった後も、定着してもクラッシュの生産をサーバーです。私はステージサーバーの下Valgrind数時間もかずに重大なエラー.

  • ElectricFenceと言われる実際のメモリを独り占めこんなもれています。でsegfaultsほぼ即時にサーバーをランダム変な場所Valgrindさんの問題です。もElectricFenceをサポートしていないスレッドはどうですか?..っているのを確認した。

  • DUMAと同様の物語としてElectricFenceが悪化させます。なEFの生産設備課題に対し、生産技術の堆積場と読みbacktraces DUMAを示すだけ"?????"(有サーバを構築-gフラグのための確認)

  • dmalloc-Iを設定サーバーにご利用いの代わりに標準のmallocルーチンがかかり後数分です。取り付けツールをプロセスにとっ掛かdmalloc:(

私はずっと単純に思います。私は、以下のツールする試み:mtrace,mpatrolも人よりも良い考えたんですか?

いい感謝のお役に立てるようにこの問題です。

更新: から受けることになってしまいになる場合もありますしかしなかなステージにサーバーのいない生産を利用したhelgrind/DRD/賛育がdatarace複数のスレッドによりメモリが破損すのキーの使用の適切なvalgrind suppressionsこれらのツールが多すぎる誤検知.だんですが、どこを見いだすことができ、生産のサーバーな減速...

役に立ちましたか?

解決 3

皆さんは、私は、バグの原因を見つけることができました。しかし、私はhelgrind / DRD / TSANを使用して、ステージのサーバー上でそれを見つけた - メモリ破損が生じた複数のスレッド間のデータ競合がありました。キーは、これらのツールは、あまりにも多くの偽陽性を示したことから、の適切なのvalgrindの抑止を使用することでした。それでも私は本当にこれは重大なスローダウンすることなく、本番サーバー上で発見することができますかわからない...

他のヒント

はい、C / C ++のメモリ破損の問題は厳しいです。 私はまた、時にはそれが問題を明らかにし、時々ではない、数回使用valgrindの。

valgrindの出力を調べている間は、速すぎてその結果を無視する傾向がありません。時には過ごしかなりの時間が経過した後、あなたはvalgrindのはあなたの最初の場所に手がかりを与えたが、あなたはそれを無視していることがわかります。

もう一つのアドバイスは、以前から知られている安定版リリースからのコードの変更を比較することです。あなたは、ソースのバージョン管理システム(例えばSVN)のいくつかの並べ替えを使用する場合、それは問題ではありません。 ([] /削除などのmemcpy、memsetを、sprintfの、新しい、削除)すべてのメモリ関連の機能を調べます。

GCC 4.1と-fstackプロテクター - すべてのスイッチを使用してプログラムをコンパイルします。メモリ破損がスタックスマッシングによって引き起こされている場合、これはそれを検出することができるはずです。あなたは、SSPの追加パラメータのいくつかでプレイする必要があるかもしれません。

あなたは試したことがあり、<のhref = "http://developer.apple.com/documentation/developertools/gcc-4.0.1/gcc/Optimize-Options.html#index-fmudflap-494" のrel = "nofollowをnoreferrer 「> -fmudflap の? (利用可能なオプションを確認するために数行をスクロールアップ)。

..あなたは清めるIBMを試すことができますが、私はそれがオープンソースではないかと思います

オープンソースであるGoogleのPerftoolsは--- --- <のhref =「http://google-perftools.googlecode.com/svn/trunk/doc/heap_checker.html」を参照してください、助けになることがありrel = "nofollowをnoreferrer">ヒープチェッカーのドキュメント。

この方法を試してください。 http://www.hexco.de/rmdebug/する 私は、その性能に低い影響を有し、広範囲にそれを使用し(それラムのほとんど影響量)が、割り当てアルゴリズムは同じです。その常に割り当てバグを見つけるのに十分な証明。あなたのプログラムは、すぐにバグが発生するとクラッシュする、それが詳細なログを持つことになります。

くなった場合はこの捕れた特定のバグが、 MALLOC_CHECK_ 環境変数(malloc manページ on追加のチェック、デフォルトのLinux malloc 実施し、一般的にはない大きなランタイム。

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