"挂钩"是指非侵入性地覆盖函数行为的能力.一些例子:
我在各种编程语言和库中看到了不同的实现:
method_missing%exception关键字用于包装try/catch块中的所有函数,可以(ab)用于挂钩我的问题是:
我希望制作一个跟踪另一个软件的函数调用的软件.
它应该像从"运行时"中调用哪个函数.
例:
int main ()
{
a ();
b ();
c ();
return 0;
}
a ()
{
d ();
e ();
}
b ()
{
e ();
f ();
}
Run Code Online (Sandbox Code Playgroud)
假设我希望在C中为C写这个,我应该如何在运行时(从第一次调用开始)跟踪调用 - 使用线程和没有线程?
提示?
我希望在每个函数调用类之前运行一些代码(可能是一个函数)以及从该类继承的类的所有函数.我想在没有实际编辑每个功能的情况下这样做,这样的事情甚至可能吗?
我会满足于将一个函数称为每个函数调用的第一条指令,而不是之前调用它.
我想解析项目中的当前c ++文件并列出其中的所有方法/函数,然后生成函数调用和调用树.你可以参考doxygen如何生成调用树.
我检查了gccxml但它没有列出从另一个函数调用的函数.
请建议我使用一些轻量级工具(开源).
谢谢!
我正在探索一个大型代码库,我不是 gdb 粉丝。我想LOG(INFO) << __PRETTY_FUNCTION__在代码库中每个函数的第一行添加一个
。但这非常乏味。有没有人知道一个技巧可以让所有函数调用打印带有函数名称的 LOG 消息?
我希望通过使用sed/awk预处理源文件来直接检测我的代码.我不能使用其他方法,如调试器跟踪或gcc选项-finstrument-functions.在最后一种情况下,地址以某种我无法管理的方式重新定位,我错过了与符号表的对应关系.这里介绍的其他方法(ptrace,etrace,callgraph等)或者在这里可以很好地用于一个简单的例子,但不是在我的真实项目中.
问题在于,在处理大型开源项目时,函数的编写标准不仅在C和C++文件之间不同,而且通常在同一文件中.的{可以是在参数列表的结尾,或在另一行,结构或分配可使用的起始{,制作简单功能解析假.
因此,在函数定义的开头插入宏的上述链接中提供的解决方案通常不起作用,并且通过手工代码行(KLOC)进行校正是不可行的.
sed 's/^{/{ENTRY/'
Run Code Online (Sandbox Code Playgroud)
那么,如何使用在sed或awk中使用的正则表达式可靠地定位C/C++代码中的函数定义?可能通过使用gcc预编译代码的一部分?我正在寻找一些可能在船上的东西.