-2

私は 2 つのバージョンを持つ 1 つの C++ プログラムを持っています。1 つのバージョンでは機能が動作していますが、他のバージョンでは動作していません。この 2 つのバージョンの違いをデバッグする方法はありますか? 具体的には、Linux と g++ を使用しています。KCachegrindのようなものを使用して差分コール グラフを表示する方法はありますか? または、これらの関数呼び出しの違いをより高速に表示する gdb の何かがありますか?

更新中... すべての違いを表示するにはプログラムが大きすぎます。まず、関数呼び出し間のパスの違いを知りたいと思います。その後、この関数だけで diff コマンドを実行するオプションがあります。

4

3 に答える 3

2

What I would recommend is writing the simplest working test input that cause a failure with the new version but succeed with the previous version. Once you have this test case, build intermediate version from the different intermediate commits in your source repository (I'd suggest doing a binary search to limit the number of recompilation, git bisect is a great tool if you happen to use git).

Once you've isolated the offending commit, have a closer look at it, or if necessary use a debugger to trace your code with your test input. Hopefully, you should have ended up with a relatively small change to validate.

于 2013-02-06T21:52:13.963 に答える
1

gdbを使用してこれに最も近いのは、いくつかのカスタムgdbおよびpythonスクリプトでマルチプロセスデバッグを使用することです[1]。この方法でgdbを使用する例が少なくとも1つあります[2]

このままでは思い通りにならない可能性が高いと思います。ただし、この方法で gdb を使用することに決めた場合は、いくつかのアイデアが得られるかもしれません。

[1] http://sourceware.org/gdb/current/onlinedocs/gdb/Inferiors-and-Programs.html#Inferiors-and-Programs

[2] http://gitorious.org/misc-gdb-stuff/misc-gdb-stuff/trees/master/misc_gdb/lockstep

于 2013-02-06T23:01:35.993 に答える
1

gprof の使用を検討しましたか? インストールしたら(ほとんどの主要なディストリビューションにはデフォルトでインストールされていると思います)、「-pg」オプションを使用してコードをコンパイルします。実行可能ファイルを実行すると、コール グラフを含むプロファイリング情報を含む gmon.out ファイルが生成されます。

このチュートリアルを見て、それがどのように機能するかをよりよく理解してください。

于 2013-02-19T01:30:37.610 に答える