0

在我的代码库中,我有很多以 void 指针作为参数的函数声明

void my_func(void* my_void_pointer)

我需要在我的来源中找到所有地方

  1. 调用 my_func 的位置
  2. (更重要的是)使用哪种类型作为参数。

例如像这样的调用:

int* intpt=new int(10);
my_func(intpt);

或者

char* charpt = new char('a');
my_func(charpt);

我需要这个,因为通常 my_funcreinterpret_cast对一些自定义类型执行操作,并且我想找出如果例如我的字节顺序更改可能会出错的地方。

我已经看过 gcc_xml,但是使用这个工具我只能找出哪些函数是用哪些参数/参数类型定义的。当然,我现在可以 grep 此类函数的函数调用的来源,但我仍然不知道它们是用哪些类型调用的。知道从哪个工具开始吗?

4

6 回答 6

2

从你的编译器开始。my_func通过重命名(或任何其他更改)并重新编译来打破原型和实现Xmy_func......编译器会告诉你它使用的每个地方。

于 2013-05-23T11:10:04.410 回答
1

将参数重命名为非指针并重新编译。您应该在调用函数的位置cannot convert int* to int或位置出现错误。cannot convert char* to int

于 2013-05-23T11:36:18.823 回答
1

您可以使用Clang Tooling编写一个小型实用程序。

于 2013-05-23T11:36:29.290 回答
0

选项 1. 使用以下命令在源目录中搜索 my_func 的出现。

grep "my_func(" * 

选项 2. 使用源导航器。在源导航器中打开源并搜索函数名称“my_func”。

于 2013-05-23T11:19:57.553 回答
0

如果你在 *nix 终端工作,你可以尝试这样的事情:

// in project root folder
// you can replace *.cpp with *.h or *.hpp etc
for i in $(find . -type f -name "*.cpp"); do \
grep -Hn "my_func" $i; \
done;
于 2013-05-23T11:22:48.627 回答
0

使用现代 IDE,例如Eclipse CDT,您可以搜索每个函数的所有出现并浏览调用站点。但是请注意,Eclipse CDT 在搜索时似乎无法区分重载,就像它的 Java 对应物那样。

于 2013-05-23T11:50:09.220 回答