2012-01-17 15 views
3

私は質問 "Is anyone using Valgrind and Qt?"を見つけましたが、それはいくつかのことを明確にしているように見えましたが、保持している情報は依然として無料の質問です。 私が知りたいのは、私が(Qtを使って)私のアプリケーションをデバッグするときです - 私が作成した関数への参照を見ることができません。代わりに、たくさんのメモリリークを持っているような低いAPI(Qtなど)からたくさんの情報が見つかりました。これは、私のアプリケーションにメモリリークがないことを意味しますか、それとも低レベルのAPIを最初にターゲットとするメモリリークに関する情報が多いことを意味しますか?またValgrindと低レベルのC++ APIをギガシックに使用する

valgrind --leak-check=full --show-reachable=yes -v ./HelloGL 

、地獄はこれで何をアップしている:

は、私は以下のフラグと私valgrindの実行可能ファイルを実行しましたか?

ERROR SUMMARY: 925 errors from 899 contexts (suppressed: 29 from 7) 

Pastebin

答えて

4

あなたの問題は、コールツリーが非常に深いことだと思います。あなたが使用して報告された深さを調整することができる:

--num-callers=<number> [デフォルト:12]

プログラムの場所を識別するスタックトレースに示されるエントリの最大数を指定します。エラーは、上位4つの関数の場所(現在の関数の場所と3つの直接の呼び出し元の場所)のみを使用して共通化されています。したがって、報告されたエラーの合計数には影響しません。

最大値は50です。Valgrindを高く設定すると、少し遅く実行され、メモリが増えますが、深くネストされたコールチェーンを持つプログラムで作業する場合は便利です。

Qtの内部で問題が発生しているのか、それともQtの使用によって引き起こされたのかは、答えるのが難しいですか。しかし、コールトレースがコードに戻らない場合、問題が本当にどこにあるかを特定することは非常に困難になります。全体としては、あなたのコードがQtよりもあなたのコードである可能性が高いと思わなければなりません。

エラーサマリについて:valgrind合計で954個のエラーが検出されました。しかし、そのうちの29はエラーメッセージが表示されないように問題を引き起こすことが知られている関数からのものでした。事実、問題を引き起こすことが知られている7つの場所(機能、文脈)で29の問題が発生しました。他の925個のエラーは抑止されませんでした。つまり、システムコード内のエラーの前に発見されなかったか、新しく発見されたコードから来たものです。これらのエラーには899の別々のコンテキストがありました(したがって、問題の原因となる場所がたくさんあり、繰り返しはほとんどありません)。コンテキストとは、記録された(特定のエラーを引き起こす関数の)呼び出しチェーンの断片です。だから、多くの問題が確認されました。あなたはそれらの問題を引き起こした機能を知ることができればいいだけです。

関連する問題