cygwin中使用calls

9 篇文章 0 订阅

《Linux环境下C编程指南(第二版)》p63页介绍了其他的编译调试工具,其中提到了calls。

该工具的使用比较简单
calls test.c就可以显示该文件中的函数调用树图
示例如下:

test.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/*;{}*/

void my_print(char *string);
void my_print2(char *string);

int main()
{
	char my_string[] = "hello there";
	my_print(my_string);
	my_print2(my_string);
}

void my_print(char *string) {
	printf("The string is %s\n", string);
}

void my_print2(char *string) {
	char *string2;
	int size, size2, i;

	size = strlen(string);
	size2 = size - 1;
	string2 = (char*)malloc(size+1);
	for (i = 0; i < size; i++) {
		string2[size2 - i] = string[i];
	}
	string[size] = '\0';
	printf("The string printed backward is %s\n", string2);
}
注意:代码中 /*;{}*/,需要在调用calls的时候放开注释,否则calls调用无返回,具体原因目前还没找到,可能跟修改calls的源码有关。
接下来讲解calls的安装步骤。

从网上下载的下来calls.tar.Z,解压之后直接编译会报错,需要手动修改部分文件
修改列表:
1,文件main.c 40行
注释掉
         /*extern char *sys_errlist[];*/
 2,文件main.c 217行
删除多余的)
         case 'U':
             sprintf(sbTemp, "-%c%s ", cOption, optarg);
 3,文件scan.c30行
注释掉
         /*static*/ HASH * 

然后需要在cygwin中建立/lib/cpp符号链接:
ln -s /etc/alternatives/cpp /lib/cpp
显示效果:


在完成上述步骤之后,可以编译calls
在cygwin中不能使用make编译calls,会报如下错误:


需要先手动编译各个文件如下:
gcc -c main.c
gcc -c scan.c
gcc -c getopt.c
gcc main.o scan.o getopt.o -o calls.exe
生成calls.exe

然后执行calls.exe test.c生成上述test.c中的函数调用树。
生成好的calls工具包可以在我的资源中下载。
http://download.csdn.net/detail/vivianke/4538141

参考文章:http://www.cppblog.com/tqsheng/archive/2012/04/05/170209.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值