搜索具有特定签名调用的函数
Search for function with specific signature call?
假设我有一些C++函数:
void A(int i) {
/* some code */
}
void A(string s) {
/* some code */
}
void A(string s, int i) {
/* some code */
}
假设第一次调用进行了 80% 的 A(( 调用,第二次调用进行了 15%,最后一次调用进行了 5%。
我想静态跟踪调用。如果我对第一种调用感兴趣,没问题,"A("的大部分字符串搜索结果都是类型 1,但如果我只想要类型 2 或类型 3,我会有很多不必要的噪音来自类型 1。
对于类型 3,如果我查找括号A(*,*,*)
之间正好有 2 个逗号的以下字符串,正则表达式会有所帮助(我实际上不知道 RE 的编程语法(
但是对于类型 2,这将不起作用。
我可以使用任何技术来通过签名查找函数调用?
编辑:我所说的"跟踪"是通过查找所需函数的所有调用点来理解当前的代码库。
对于类型 3,如果我查找括号 A(,,*( 之间正好有 2 个逗号的以下字符串,正则表达式会有所帮助(我实际上不知道 RE 的编程语法(
但是对于类型 2,这将不起作用。
我可以使用任何技术来通过签名查找函数调用?
除了使用一些正则表达式(例如记事本++文件搜索,egrep或类似内容(搜索文件之外,假设您能够更改声明/定义这些函数的源代码,您还可以使用一些编译器标准功能,例如[[deprecated]]
属性:
void A(int i) {
/* some code */
}
[[deprecated]] void A(string s) {
// ^^^^^^^^^^^^^^
/* some code */
}
[[deprecated]] void A(string s, int i) {
// ^^^^^^^^^^^^^^
/* some code */
}
这将在使用这些函数时显示警告:
int main() {
A(5);
A("Hello");
A("Hello",42);
}
main.cpp:9:25: note: declared here [[deprecated]] void A(string s) { ^ main.cpp:20:18: warning: 'void A(std::__cxx11::string)' is deprecated [-Wdeprecated-declarations] A("Hello"); ^ main.cpp:9:25: note: declared here [[deprecated]] void A(string s) { ^ main.cpp:21:21: warning: 'void A(std::__cxx11::string, int)' is deprecated [-Wdeprecated-declarations] A("Hello",42); ^ main.cpp:13:25: note: declared here [[deprecated]] void A(string s, int i) { ^ main.cpp:21:21: warning: 'void A(std::__cxx11::string, int)' is deprecated [-Wdeprecated-declarations] A("Hello",42); ^ main.cpp:13:25: note: declared here [[deprecated]] void A(string s, int i) { ^
请参阅使用 g++ 编译的在线示例。
您甚至可以用一条消息来装饰它,发送给维护代码库的同事:
[[deprecated("Get rid of these performance killing calls."
" Use A(A::getPrecomputedHash(s)) instead.")]]
void A(string s) {
}
相关文章:
- 如何用参数值调用函数(仅在运行时已知)
- 从python中调用C++函数并获取返回值
- 当使用通配符和null指针调用函数时,对输出的说明
- 从R调用C++函数并对其进行集成时出错
- 使用QTreeView,如何通过调用函数只突出显示特定的行/列
- 如何在qt中从另一个类调用函数
- 在 COUT 语句中使用 COUT 调用函数
- 如何从线程中的不同模块调用函数?
- C++从函数指针数组调用函数
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 如何在 C/C++ 中从外部库调用函数
- 如何使用运算符在同一行中多次调用函数
- 是否可以创建一个从不同类调用函数的线程?
- 无法为类成员调用函数
- 如何从另一个标头 c++ 调用函数
- C++,使用类名调用函数
- 如何在c++中从平面文件中调用函数名
- 使用注入的类名调用成员函数
- 在调用函数的任何位置获取文件名和函数名
- 针对不同的文件扩展名调用不同的函数