1

背景とコンテキスト: 私は Chromium で小さなプロジェクトを行っており、パラメーターとして受け取った JS コードをコンパイルする関数に取り組んでいます。

JS コードで型を取得し、そこからコードで C++ 文字列 (または C char*) を作成することができました。

私が直面している問題は、JS コードを含む元の型を作成することです。この型を作成する行を Chromium ファイルで検索しましたが、コード (char* または string として) を使用する行が見つかりませんでした)、コードでその型を作成します-関数が受け取るパラメーターのように。

私が探しているもの: この関数が最初にこのパラメーターをどのように受け取るかについてよりよく理解するために(自分で作成できるようになります)、特定のパラメーターについて教えてくれるC / C ++用のツールを探しています関数、または特定の関数のパラメーター、このパラメーターを渡した人、関数に渡した人に渡した人 (など)、最終的に作成した人 (できればコードのどの行)

誰もそのようなツールを知っていますか? どんな助けでも大歓迎です!

4

5 に答える 5

1

呼び出し元の抽出に役立つマクロで関数をラップできます。たとえば、もともと関数 signaturevoid foo(int param1, int param2);がある場合は、代わりに次のように定義できます。

#define foo(param1, param2) fooEx(param1, param2, __FUNCTION__)
void fooEx(int param1, int param2, const char* caller);

これで、元の関数内で呼び出し関数がわかったので、print など、好きなことを実行できます。元のインターフェイスは変更されないため、発信側で変更する必要はありません。

于 2013-03-23T09:55:47.533 に答える
0

少なくとも 1 つの「ドラフト」アイデアは、GNU デバッガー (gdb)をブレーク ポイントとスタック トレースと共に使用することです。おそらく条件チェックで。この場合、実行中のプロセスにアタッチする機能も役立ちます。あなたの質問がよくわからなかったら、もっと詳しく説明していただけませんか?

于 2013-03-23T09:37:11.520 に答える
0

有能な IDE (私は Visual Studio がこれを行うことを知っているので、他のものも同様に利用できるはずです) は、関数への静的に既知の着信呼び出しを表示できるはずです。うまくいけば、それほど多くはありません。そこから逆方向に作業できます。

それがうまくいかない場合 (つまり、これを処理する IDE がないか、非常に多くの呼び出し元が存在する場合)、呼び出し履歴を調べるためにデバッガーとブレークポイントで行き詰まっている可能性があります。

于 2013-03-23T09:45:52.347 に答える
0

詳細については、valgrind ( http://en.wikipedia.org/wiki/Valgrind ) を使用できます。これは、C/C++ コードのデバッグ、メモリ リークの検出、およびプロファイリング (これにより、この関数がどのパラメーターで呼び出されたかがわかります) に役立ちます。

于 2013-03-23T09:41:05.073 に答える
0

質問を正しく理解しているかどうかわかりませんが、関数の呼び出しグラフに関する情報、つまり、どの関数があなたの関数を呼び出したのか、どの関数によって呼び出されたのかなどの情報が必要なようです。

ここでは、基本的に 2 つのオプションがあります。デバッガーを使用するか、関数にブレークポイントを設定するか、呼び出しグラフを動的に表示します (ほとんどのデバッガーにはこの機能があります)。または、静的コード分析ツールを使用します (Google がこれを支援します。たとえば、この (クローズされた) 質問を見つけました)。

これは、「パラメーター」がどこから来たのかを常に直接伝えるわけではないことに注意してください。コール グラフ内のすべての関数は何らかの形でデータを操作できるため、データを処理するすべてのコードを調べる必要があります。

于 2013-03-23T09:44:56.907 に答える