【发布时间】:2012-12-27 06:27:52
【问题描述】:
我试图在执行程序之后在用 C 编写的目标程序中获取执行语句的序列,但我找不到方法。 我不需要在运行时获取执行语句的序列。 有没有办法做到这一点? 仅供参考,我知道 gcov 报告语句覆盖率,但据我所知,它不报告目标程序中执行语句的序列(我想获得执行语句的序列仅在目标程序源代码中) . 我正在使用 gcc 编译器在 Linux 中运行 C 程序 :)
为了您的清楚理解,请参见以下示例。
当我执行以下程序时,我想得到执行语句的序列,如下所示。
1: int main()
2: {
3: int a = 10;
4: printf("hello");
5: if( a == 10){
6: printf("a == 0");
7: }else{
8: printf("a != 0");}
9: return 0;
10: }
输出我想要得到的是:34569 (由于我要跟踪的目标程序在一行中只有一个语句, 行号序列作为输出对我来说就足够了)
几个小时前有人向其他人提出了这个问题(参见question),但没有明确答案的一些读者将其关闭。 如果它有众所周知的解决方案,请告诉我。
【问题讨论】:
-
如果你两次问同样的问题,很可能会被关闭为重复。
-
无法追踪已完成的程序。您需要在运行时 1) 通过使用跟踪工具或 2) 通过您自己的方式收集此信息。
-
您在编辑器中看到的行号可能不是编译的实际行号。预处理器包括宏和所有其他幕后的东西肯定会“干扰”和“改变”你的行号。实际上,输出几乎没有用,绝对不值得生成它所需的黑客攻击。最好附加一个调试器并观察程序流程。
-
源代码不执行。所以你不能得到这个信息。二进制执行。如果您将行号信息通过
__LINE__放入二进制文件中,您将得到它。