継承されたコードベースで再帰関数呼び出しを検索して除去する必要があります。 これまで静的解析を行い、これらの機能を見つけるツールは見つけられませんでした。Cコードで再帰関数呼び出しを検出するツールはありますか?
答えて
あなたはcflowをしようとする場合があります:
CFLOWユーティリティが書き込ま、オブジェクトファイルまたはアセンブラ、C言語、lex、yaccのソースファイルのコレクションを分析し、グラフを構築しようとするもの標準出力、外部参照をグラフ化します。
コールグラフを印刷し、再帰関数をマークする必要があります。
cflowは(私が書いたruby scripの助けを借りて)かなりうまくやってくれました。私は望んでいないので、最大限のカバレッジシナリオを見つけるために深く潜んでください。しかし、GNU cflowはLinuxベースのシステムからしかコンパイルされません。誰でもWindowsのポートを知っていますか? – Sam
あなたのコードが関数ポインタを介して間接呼び出しを持っている場合、その中の再帰呼び出しを検出することは非常に難しいかもしれません(一般的な場合は、停止問題と同じです。
しかし、私は再帰を排除することは努力する価値があるとは確信していません。いくつかの再帰的なアルゴリズムや問題については、スタック(ヒープ)でシミュレートするだけで置き換えられますが、あまり役に立たない(コードを読むことができなくなります)。
もっと実用的な解決策(少なくともLinuxでは)は、スタックサイズを制限し、スタックを埋めることによってテストが実行されるまで実行します。次に、デバッガを使用して、デバッガの動作を理解することができます。
私はあなたが再帰についてそれほど気にはならないと思う...
スタックのサイズを制限したり、スタックオーバーフローを引き起こすという考えは決して考えませんでした。素晴らしい提案! – beta
実行中のプログラムをサンプリングするもう1つの方法は、プロファイリングを有効にしてコンパイルし(gccの-pg)、結果に対して(g)profを実行することです。 Gprofは(初歩的な)コールグラフを表示します。 – wildplasser
CILは、CプログラムのためのCFGを生成することができますが、それは少し主食に入れてハンマーを使用してのようなものです。
- 1. プログラム内の不要な再帰呼び出しを検出するツールはありますか?
- 2. C++ BST - 再帰なしでdisplay()関数を呼び出す
- 3. Cの再帰的プロシージャ内で再帰呼び出しを呼び出す
- 4. C#でMain関数を再度呼び出す方法はありますか?
- 5. Angularjs - 最初に呼び出した後に関数呼び出しを再帰呼び出しします。
- 6. 関数を返す関数の再帰呼び出し
- 7. Cコードからアセンブリ関数を呼び出す方法はありますか?
- 8. javascriptで関数の再帰呼び出しで同じ変数にアクセスする方法はありますか?
- 9. テンプレート関数を使用してクラスを呼び出すC++再帰関数
- 10. あいまいな呼び出しを再帰的に可変引数テンプレート関数のオーバーロードを呼び出す
- 11. 再帰関数:PHP関数自体を呼び出す
- 12. 関数呼び出しでテンプレート再帰を行うには?
- 13. セグメンテーションフォルト(コアダンプ)エラーC++再帰呼び出し
- 14. 再帰関数:関数呼び出しの前後のprintステートメント
- 15. 3回の再帰呼び出しを1行で呼び出しますか?
- 16. 再帰関数呼び出しが終了するか、その実装に誤りがありますか?
- 17. Cでバッファオーバーフローを検出するツールはありますか?
- 18. 再帰関数の呼び出しをカウントする方法(1ずつインクリメント)| C++
- 19. 関数呼び出しを再帰的に返す - 理論リターンステートメント
- 20. javascript/Polymerで再帰関数を呼び出せません
- 21. 再帰呼び出しをトレースする
- 22. node.jsで再帰的にasync関数を呼び出す
- 23. ループ内で再帰関数を呼び出す
- 24. .mm拡張子なしでobjective-cコードからC++関数を呼び出す方法はありますか?
- 25. Pythonで関数のリストを再帰的に呼び出しますか?
- 26. 約束からの呼び出し再帰関数
- 27. LinuxでJavaコードからC関数を呼び出すには
- 28. 値は、関数の再帰呼び出しに
- 29. 再帰の変数への関数呼び出しの代入は、異なる出力になります。
- 30. JavaScriptでの再帰関数の呼び出し
なぜこれを行う必要がありますか? – sth
@sth:あなたはなぜ知りたいですか? – duedl0r
@ duedl0r:彼が解決しようとしている問題が再帰関数を避けるよりも良い解決策を持っているかもしれないので、 – sth