C++ c++;打印执行代码

C++ c++;打印执行代码,c++,debugging,printf,C++,Debugging,Printf,是否有任何方法可以将为调试目的而执行的代码打印到文本文件中 例如: if (i == 1) { a = true; } else { a = false } 因此,当i=1时,我们打印到文本文件: if (i == 1) { a = true; } else 当我1我们打印到文本文件 if (i == 1) else { a = false } 我并不是说这是一个好的做法。我知道gdb和其他工具更适合调试代码,所以如果你认为这是一个糟糕的想法,请不要生气。我只是想知道能不能做到。这

是否有任何方法可以将为调试目的而执行的代码打印到文本文件中

例如:

if (i == 1)
{
 a = true;
}
else
{
 a = false
}
因此,当i=1时,我们打印到文本文件:

if (i == 1)
{
 a = true;
}
else
当我1我们打印到文本文件

if (i == 1)
else
{
 a = false
}

我并不是说这是一个好的做法。我知道gdb和其他工具更适合调试代码,所以如果你认为这是一个糟糕的想法,请不要生气。我只是想知道能不能做到。这就像在每一行之后添加一个printf,所以我们只打印执行的行。没有线程保存或类似的东西。

出于调试目的,我认为这是不实际的。是的,您可以在每行执行之前/之后执行printf,但这只会阻塞您的程序。此外,如果您谈论的是调试循环的执行,那么最终您将一次又一次地打印一堆垃圾,并且必须永远寻找潜在的bug。简而言之,使用断点


然而,从理论的角度来看,创建一个新的模型是可能的。这与您想要的略有不同,因为您只需要程序的一部分,但我的最佳猜测是,只需稍加修改即可完成。

出于调试目的,我认为这是不实际的。是的,您可以在每行执行之前/之后执行printf,但这只会阻塞您的程序。此外,如果您谈论的是调试循环的执行,那么最终您将一次又一次地打印一堆垃圾,并且必须永远寻找潜在的bug。简而言之,使用断点


然而,从理论的角度来看,创建一个新的模型是可能的。这与您想要的有点不同,因为您只需要程序的一部分,但我的最佳猜测是,只需稍加修改即可完成。

我认为您想要的与调试没有任何关系,而是与单元测试和测试覆盖率有关:

您需要为代码创建单元测试(例如,使用),并在打开代码覆盖率选项的情况下编译它(例如,GCC的
--coverage
)。然后,您可以使用工具创建覆盖率报告(例如,针对上述工具链)


单元测试将控制您案例的输入(i=1/0)。

我认为您想要的不是调试,而是单元测试和测试覆盖率:

您需要为代码创建单元测试(例如,使用),并在打开代码覆盖率选项的情况下编译它(例如,GCC的
--coverage
)。然后,您可以使用工具创建覆盖率报告(例如,针对上述工具链)


单元测试将控制您案例的输入(i=1/0)。

您使用的是什么调试器/编译器?如果您有类似VisualStudio的东西,您可以编译w/debug信息以获得类似于您所需的功能。您可以使用运行gdb的脚本来完成这项工作。从编译器来看,这是不可能的;对于任何“真正”的程序,结果都是千兆字节(如果不是TB的话)。我可以放心地说:这是正确的解决方案,这没有问题。嗯,可能你真的在问XY问题。请详细说明您的用例。正如我在回答中提到的,可以使用覆盖率分析代码注入来分析执行的代码路径。运行一个特定的测试用例(输入选择)会给你一个详细的覆盖率报告,哪些代码路径执行的频率有多高。你使用的是什么调试器/编译器?如果您有类似VisualStudio的东西,您可以编译w/debug信息以获得类似于您所需的功能。您可以使用运行gdb的脚本来完成这项工作。从编译器来看,这是不可能的;对于任何“真正”的程序,结果都是千兆字节(如果不是TB的话)。我可以放心地说:这是正确的解决方案,这没有问题。嗯,可能你真的在问XY问题。请详细说明您的用例。正如我在回答中提到的,可以使用覆盖率分析代码注入来分析执行的代码路径。运行一个特定的测试用例(输入选择)会给你一个详细的覆盖率报告,报告哪些代码路径被执行了多少次。奎因与此无关。我想最初的帖子是问你是否可以或多或少地让程序本身输出?“或多或少”-这里。它在执行时打印程序的行。我不同意。这种方法可能非常有用,特别是当程序可以在许多路径中执行时。有时要找到一个bug(或未实现的功能),需要切断许多开关、条件检查等。quine与此无关。我想最初的帖子是问你是否可以或多或少地自己生成一个程序输出?“或多或少”-这里。它在执行时打印程序的行。我不同意。这种方法可能非常有用,特别是当程序可以在许多路径中执行时。有时,为了发现一个bug(或未实现的特性),需要切断许多开关、条件检查等。。。