【问题标题】:defining a behavior for each function c++为每个函数 C++ 定义一个行为
【发布时间】:2012-02-25 06:36:28
【问题描述】:

有没有人知道一种方法来定义在 C++ 程序中的每个函数或行上调用的某些行为?

我想通过在应用程序中的某些点退出来验证我的软件,并确保该进程的下一次启动可以处理该进程先前死亡的所有点的恢复。

本质上,我正在寻找一种在 C++ 中编写脚本失败的方法,这样我就不必使用一些宏来定义点,只需告诉应用程序基本上循环遍历所有这些“死亡点”并确认流程可以从其中的每一个中恢复,以自动化的方式完成所有这些。

我可以轻松地创建一个名为 DEATH_POINT() 的宏,它基本上可以检查它是否应该退出进程,但我希望有一些比在代码中放置一堆 fo 宏更优雅的东西.

【问题讨论】:

  • 您是否针对特定平台/编译器?
  • 啊,是的!我应该提到这一点。 gcc 4.6.1/linux。

标签: c++ validation testing


【解决方案1】:

根据您使用的编译器,可能有一种方法可以让它在每次进入函数时自动调用函数。这可能会满足您的需求。

对于 Visual Studio,这里有信息:http://msdn.microsoft.com/en-us/library/c63a9b7h.aspx 这里的最佳答案有关于在 GCC 中执行此操作的信息:Automatically adding Enter/Exit Function Logs to a Project

【讨论】:

  • 哇,是的。好找到退休的忍者。我完全可以使用 GCC 仪器功能。有没有办法在行粒度而不是函数粒度上做到这一点?无论如何,这非常有帮助!
  • 不,这只是每个函数调用。 @BenVoigt 关于使用调试 API 获得更多粒度是正确的。
【解决方案2】:

我建议您更进一步,逐条进行测试,而不是整个表达式、语句或行。

您应该能够使用调试器 API 以编程方式设置断点(不过,您需要一个辅助进程,IIRC)。到达断点时,进程将暂停。并且您可以在断点被命中时接收事件并终止进程。

【讨论】:

  • @MichaelXu:没有理由你不能用 linux 来做,你只需要使用 linux 调试 API 和 dwarf2 调试信息。我建议阅读gdb 源代码,或其他一些适用于 linux 的开源调试器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多