2

callgrindプロファイラーを使用してC++プログラムのプロファイリングを試みています。Intel32ビットプロセッサのLinuxCentosバージョン5.5でValgrindバージョン3.6,1を使用しています。プログラムのプロファイルを作成しようとすると、次のエラー(以下に表示)が発生し続けます。私はすでにLinuxgprofを使用しましたが、有用なプロファイリング情報を提供しませんでした。何が間違っているのか、どのような回避策を使用すべきかを教えてください。ありがとうございました

valgrind --tool = callgrind --dump-instr = yes --simulate-cache-yes --collect-jumps = yes ./MatchUpAccurate.exe -input /home/frankc/DQTTest5/MatchUpTest/TestData/mdata2003.dbf -fileloc / home / frankc / DQTTest5 / MatchUpTest / TestData -version 15

== 25558 ==コールグラフ生成キャッシュプロファイラーであるCallgrind、== 25558 == Copyright(C)2002-2010、and GNU GPL'd、by Josef Weidendorfer et al。、== 25558 == Using Valgrind-3.6 .1およびLibVEX; 著作権情報の場合は-hを指定して再実行します。==25558==コマンド:./ MatchUpAccurate.exe -input /home/frankc/DQTTest5/MatchUpTest/TestData/mdata2003.dbf -fileloc / home / frankc / DQTTest5 / MatchUpTest / TestData -version 15、== 25558 ==、== 25558 ==インタラクティブな制御を行うには、「callgrind_control -h」を実行します。、memcpy、BB#486126、

Callgrind:jumps.c:164(new_jcc):アサーション'(0 <= jmp)&&(jmp <= from-> bb-> cjmp_count)' failed。、== 25558 == at 0x3801E4C8:report_and_quit(m_libcassert.c: 193)、== 25558 == by 0x3801E69C:vgPlain_assert_fail(m_libcassert.c:267)、== 25558 == by 0x3800FCD9:vgCallgrind_get_jcc(jumps.c:164)、== 25558 == by 0x38003534:vgCallgrind_p :217)、== 25558 == by 0x38001FDB:vgCallgrind_setup_bbcc(bbcc.c:844)、== 25558 == by 0x629B9E93:???、

スケジュールされたステータス:、running_tid = 1、

スレッド1:status = VgTs_Runnable、== 25558 == at 0xB64A30:memcpy(in /lib/libc-2.5.so)、== 25558 == by 0xC845D3:__pthread_initialize_minimal(in /lib/libpthread-2.5.so)、= = 25558 == by 0xC84217:??? (/lib/libpthread-2.5.so内)、== 25558 == by 0xC83DA7:??? (/lib/libpthread-2.5.so内)、== 25558 == by 0xAE2162:call_init(in /lib/ld-2.5.so)、== 25558 == by 0xAE228F:_dl_init(in /lib/ld-2.5 .so)、== 25558 == by 0xAD484E:??? (/lib/ld-2.5.so内)、

注:ソースディストリビューションのFAQも参照してください。これには、いくつかの一般的な問題の回避策が含まれています。特に、プログラムの問題を特定した後にValgrindが中止またはクラッシュした場合、それらの問題を修正するとValgrindの中止が防止される可能性があります。または、特にm_mallocfree.cで発生した場合は、クラッシュします。

それでも問題が解決しない場合は、このバグをwww.valgrind.orgに報告してください。

バグレポートで、上記のすべてのテキスト、valgrind、バージョン、および使用しているOSとバージョンを送信します。ありがとう。

4

1 に答える 1

1

こんばんは、Callgrind エンジニアの Josef Weidenorfer からメールを受け取りました。Josef は、callgrind の問題を修正するために valgrind/callgrind パッチを送ってくれました。これがパッチです(下に表示)。パッチを適用して、valgrind/callgrind を再構築しました。callgrind は、Centos Linux 5.5 で fibonacci(25) 関数をプロファイリングできるようになりました。ありがとうございました。

--- a/callgrind/bbcc.c
+++ b/callgrind/bbcc.c
@@ -693,6 +693,7 @@ void CLG_(setup_bbcc)(BB* bb)
               /* change source for delayed push */
               CLG_(current_state).bbcc = top_ce->jcc->from;
               sp = top_ce->sp;
+               passed = top_ce->jcc->jmp;
               CLG_(pop_call_stack)();
           }
           else {
@@ -841,6 +841,7 @@ void CLG_(setup_bbcc)(BB* bb)
    if (!skip && CLG_(current_state).nonskipped) {
      /* a call from skipped to nonskipped */
      CLG_(current_state).bbcc = CLG_(current_state).nonskipped;
+      passed = CLG_(current_state).bbcc->bb->cjmp_count;
    }
    CLG_(push_call_stack)(CLG_(current_state).bbcc, passed,
                        bbcc, sp, skip);
于 2011-04-27T23:16:25.510 に答える