给定一个C程序,我必须确定访问全局变量的函数是读取它们还是写入它们.
示例代码:
#include <stdio.h>/* global variable declaration */int g = 20;int main(){ /* writing the global variable */ g = 10; /* reading the global variable */ printf ("value of g = %d\n",g); return 0;}
执行上述代码,我想以下列格式生成日志文件:
1- Global variable a written in function main() "TIME_STAMP"2- Global variable a read in function main() "TIME_STAMP"
研究:
我可以通过对源代码进行静态分析来达到这个目的:
>通过c代码并识别全局的语句
变量被读取.
>然后分析c代码语句来确定是否
它是一个读或写语句(检查if或 – *** 作符
与全局变量或任何assignemnt一起使用
全局变量)
>在执行的标识语句之上添加一个日志声明
连同这个陈述执行.
这不是一个正确的实现.
一些研究:
我已经了解了调试器如何捕获信息.
互联网中的一些链接:
How to catch a memory write and call function with address of write
#include <stdio.h>int g = 0;#define g (*(fprintf(stderr,"accessing g from %s. g = %d\n",__FUNCTION__,g),&g))voID foo(voID){ g = 2; printf("g=%d\n",g);}voID bar(voID){ g = 3; printf("g=%d\n",g);}int main(voID){ printf("g=%d\n",g); g = 1; foo(); bar(); printf("g=%d\n",g);}
哪个打印:
accessing g from main. g = 0g=0accessing g from main. g = 0accessing g from foo. g = 1accessing g from foo. g = 2g=2accessing g from bar. g = 2accessing g from bar. g = 3g=3accessing g from main. g = 3g=3总结
以上是内存溢出为你收集整理的c – 记录全局变量是否被读取或写入全部内容,希望文章能够帮你解决c – 记录全局变量是否被读取或写入所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)