1

背景和背景: 我在 Chromium 上做一个小项目,我正在开发一个函数,它编译作为参数接收的 JS 代码。

我能够使用 JS 代码获取类型,并使用代码从它创建一个 C++ 字符串(或 C char*)。

我面临的问题是创建其中包含 JS 代码的原始类型的东西,我在 Chromium 文件中搜索了创建这种类型的行,但没有找到需要代码的行(如 char* 或 string ) 并使用代码创建该类型 - 就像函数接收的参数一样。

我在找什么: 为了更好地理解这个函数最初是如何接收这个参数的(所以我可以自己创建它)我正在寻找一个 C/C++ 工具,它可以告诉我给定的函数,或给定函数的参数,谁传递了这个参数,谁将它传递给将它传递给函数的那个​​(等等),最后谁创建了它(最好是代码中的哪一行)

有谁知道这样的工具?任何帮助是极大的赞赏!

4

5 回答 5

1

您可以使用可以帮助提取调用者的宏来包装您的函数。例如,如果最初您有函数签名void foo(int param1, int param2);,则可以改为定义:

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

现在在你的原始函数中你知道调用函数,所以你可以用它做任何你想做的事情,例如打印。您的原始界面保持不变,因此主叫方无需进行任何更改。

于 2013-03-23T09:55:47.533 回答
0

至少一个“草稿”想法是使用带有断点和堆栈跟踪的GNU 调试器 (gdb) 。可能有条件检查。在这种情况下,附加到正在运行的进程的能力也应该很有用。如果我不能很好地理解您的问题,您能否解释更多细节?

于 2013-03-23T09:37:11.520 回答
0

要获得更多信息,您可以使用 valgrind ( http://en.wikipedia.org/wiki/Valgrind )。这将帮助您调试 C/C++ 代码,进行内存泄漏检测和分析(它会告诉您调用这个函数的参数是什么)。

于 2013-03-23T09:41:05.073 回答
0

我不确定,如果我正确理解了这个问题,但您似乎需要有关函数调用图的信息,即哪个函数调用了您的函数、调用了哪个函数等等的信息。

在这里,您基本上有两个选择:使用调试器,为您的函数设置断点并动态显示调用图(大多数调试器都具有此功能)。或者你使用静态代码分析工具(谷歌会帮你解决这个问题,例如我发现了这个(关闭的)问题)。

请注意,这并不总是直接告诉您“参数”来自何处:调用图中的每个函数都可以以某种方式操纵数据,因此您仍然必须查看处理数据的每一段代码。

于 2013-03-23T09:44:56.907 回答
0

一个称职的 IDE(我知道 Visual Studio 会这样做,所以其他的也应该可用)应该能够向您显示静态已知的对函数的传入调用。希望没有那么多,你可以从那里向后工作。

如果这不起作用(即您没有处理此问题的 IDE,或者调用者过多),您可能会被调试器和断点卡住来检查调用堆栈。

于 2013-03-23T09:45:52.347 回答