相关疑难解决方法(0)

函数钩在C++中?

"挂钩"是指非侵入性地覆盖函数行为的能力.一些例子:

  • 在函数体之前和/或之后打印日志消息.
  • 将函数体包裹在try catch体中.
  • 测量函数的持续时间
  • 等等...

我在各种编程语言和库中看到了不同的实现:

  • 面向方面编程
  • JavaScript的第一类函数
  • OOP装饰图案
  • WinAPI子类化
  • Ruby的 method_missing
  • SWIG%exception关键字用于包装try/catch块中的所有函数,可以(ab)用于挂钩

我的问题是:

  • IMO这是一个非常有用的功能,我想知道为什么它从未被实现为C++语言功能.是否有任何理由阻止这种情况发生?
  • 在C++程序中实现这一点有哪些推荐的技术或库?

c++

33
推荐指数
2
解决办法
6449
查看次数

如何制作跟踪其他软件功能调用的软件?

我希望制作一个跟踪另一个软件的函数调用的软件.
它应该像从"运行时"中调用哪个函数.

例:

int main ()
{
    a ();
    b ();
    c ();
    return 0;
}

a () 
{
   d ();
   e ();
}

b ()
{
   e ();
   f ();
}
Run Code Online (Sandbox Code Playgroud)

假设我希望在C中为C写这个,我应该如何在运行时(从第一次调用开始)跟踪调用 - 使用线程和没有线程?

提示?

c linux parsing multithreading

17
推荐指数
2
解决办法
578
查看次数

在C++的每个函数调用类之前运行代码

我希望在每个函数调用类之前运行一些代码(可能是一个函数)以及从该类继承的类的所有函数.我想在没有实际编辑每个功能的情况下这样做,这样的事情甚至可能吗?

我会满足于将一个函数称为每个函数调用的第一条指令,而不是之前调用它.

c++ aop

7
推荐指数
1
解决办法
2560
查看次数

c ++:生成函数调用树

我想解析项目中的当前c ++文件并列出其中的所有方法/函数,然后生成函数调用和调用树.你可以参考doxygen如何生成调用树.

我检查了gccxml但它没有列出从另一个函数调用的函数.

请建议我使用一些轻量级工具(开源).

谢谢!

c++ gcc slickedit doxygen

5
推荐指数
1
解决办法
5630
查看次数

在 C++ 中调用函数时,如何打印每个函数名称?

我正在探索一个大型代码库,我不是 gdb 粉丝。我想LOG(INFO) << __PRETTY_FUNCTION__在代码库中每个函数的第一行添加一个 。但这非常乏味。有没有人知道一个技巧可以让所有函数调用打印带有函数名称的 LOG 消息?

c++ debugging function

5
推荐指数
1
解决办法
1527
查看次数

如何在使用sed或awk预处理C/C++代码时可靠地定位函数?

我希望通过使用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预编译代码的一部分?我正在寻找一些可能在船上的东西.

c c++ regex awk sed

3
推荐指数
1
解决办法
132
查看次数

标签 统计

c++ ×5

c ×2

aop ×1

awk ×1

debugging ×1

doxygen ×1

function ×1

gcc ×1

linux ×1

multithreading ×1

parsing ×1

regex ×1

sed ×1

slickedit ×1