【问题标题】:Printing C++ code execution step by step [closed]逐步打印C++代码执行[关闭]
【发布时间】:2014-01-21 18:39:50
【问题描述】:

我在 C++ 中的 Windows 中有一个项目。 我正在为此准备一个功能级别的测试平台,并且我希望以这样一种方式处理 C++ 代码,即在运行测试时,每一行执行都会打印在日志文件中,以便无需重新访问代码流路径任何调试器。 是否有任何处理工具可以帮助我做到这一点?我是 C++ 新手,所以我对可用的工具了解不多,Google 也帮不上什么忙。

即使你给我一个想法,如果它还没有,我该如何开发它,它会很好。 我的应用程序是单线程的,而且是一个简单的应用程序。有几个类和大约 30 个函数。负载/时序等不是约束。最好我也想在执行的每一行打印局部变量和全局变量。类似于 Visual Studio 调试器帮助我们在每个步骤中查看所有内容的方式。我希望在一个文件中输出。

【问题讨论】:

  • 从你所说的,我认为你误解了单元测试的目的。
  • 每一行的日志执行?你确定它会让你的应用程序可调试吗?真的确定它比少数、放置良好的原木要好吗?顺便说一句,单元测试和日志记录之间有什么联系?
  • 好的,我应该称之为功能级别测试。我想在我的组织中,除了集成测试之外的所有东西都称为单元测试:)。对于那个很抱歉。是的,日志记录会有所帮助。编写一个脚本来与上次执行和新的执行进行比较可以提供一些很好的洞察力。
  • @UtkarshKumar 调试器可以使用这种信息......将其打印到日志文件将是大量的。此外,您必须决定什么构成“线”:例如一条汇编指令,代码库中的一行?为此目的创建了调试器......使用它们。
  • @ZacHowland 我同意这一点。您是否知道任何调试器允许我们通过命令行在预定义的点(我可以在我的代码中精确定位)转储整个本地,以便以后查看?

标签: c++ unit-testing testing


【解决方案1】:

如果您在 Linux 上使用最近的 GCC,您可以通过添加内部传递来自定义 GCC(例如使用 MELT,一种扩展 GCC 的域特定语言),这会将 gimple 表示更改为例如在每个基本块内和每次调用之前,添加对某些检测例程的 Gimple 调用。但这需要一个多星期的工作。另请注意,最新版本的 GDB 调试器可以在 Python 中编写脚本。

您也可以尝试自定义您的编译器(或您的 IDE)。

否则,您可能想要一些aspect oriented programming。也许AspectC++ 可能有用。见this

但是我觉得和unit testing没有关系。无论您尝试什么(它会像您梦寐以求的那样神奇地检测您的代码)都可能比简单的测试技术更加复杂和昂贵(就工作量而言)。

也许只是在代码中添加调试打印宏更简单。见this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 2014-01-02
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多