Chinaunix

标题: 用shell取得函数中定义的变量 [打印本页]

作者: jwz0620    时间: 2012-10-13 00:03
标题: 用shell取得函数中定义的变量
本帖最后由 jwz0620 于 2012-10-19 23:55 编辑

假设一个 .c 程序, 里面有函数定义若干, 函数中定义若干变量, 有什么办法可以把函数定义的所有变量按函数找出来?
如:
funtion_a(){

  int a, b;
  char bb[10];

  ........

  ........
}

funtion_b(){

  int a, b;

  ........

  ........
}

输出结果为:
函数名      变量名
funtion_a    a
funtion_a    b
funtion_a    bb
funtion_b    a
funtion_b    b
作者: ziyunfei    时间: 2012-10-13 11:24
用shell写个C parser吗?牛
作者: winway1988    时间: 2012-10-13 14:35
本帖最后由 winway1988 于 2012-10-13 14:35 编辑
  1. $ cat test.c
  2. int
  3. f1(void)
  4. {
  5.     int a1, a2;
  6.     int b1;

  7.     printf("b1 = %d\n", b1);

  8.     return a1 + a2;
  9. }

  10. int
  11. f2(int a, int b)
  12. {
  13.     int a3 = a;
  14.     int b2 = b;

  15.     return a3 + b2;
  16. }

  17. int
  18. main()
  19. {
  20.     int a, b;

  21.     f1();
  22.     f2(a, b);

  23.     return 0;
  24. }
  25. $ cat awkscr
  26. /\(DW_TAG_subprogram\)/ {
  27.     flag = 1;
  28.     next;
  29. }

  30. flag == 1 && /DW_AT_name/ {
  31.     func_name = $NF;
  32.     flag = 2;
  33.     next;
  34. }

  35. flag == 2 && /\(DW_TAG_variable\)/ {
  36.     flag = 3;
  37.     next;
  38. }

  39. flag == 3 && /DW_AT_name/ {
  40.     print func_name, $NF;
  41.     flag = 2;
  42. }
  43. $ gcc -g -c test.c                        
  44. test.c: In function ‘f1’:
  45. test.c:7: warning: incompatible implicit declaration of built-in function ‘printf’
  46. $ readelf --debug-dump test.o | awk -f awkscr
  47. f1 a1
  48. f1 a2
  49. f1 b1
  50. f2 a3
  51. f2 b2
  52. main a
  53. main b
复制代码

作者: L_kernel    时间: 2012-10-13 21:39
楼上的方法不错,转换一下~~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2