最近参加了一个项目,因为是做C的,原本以为是使用gcc和gdb来作为编译和调试的工具。结果未曾想,开发环境上居然只允许使用cc编译器,没用过啊。。参数都不知道,没办法,查资料。。啥文的都有,可是苦了俺了。自己忘性大,还是做下纪录,以备后查。
CC编译器:
开发调试常用参数:
-g 输出带有调试信息的编译结果
-c 编译文件,但是不做连接(link)操作,默认生成与.c文件同名的.o文件
-l 指定要是用的lib名称,如libsocket.so则为 -lsocket
-I 指定要去寻找include头文件的路径,可以复数指定。
-G 用来指定生成共享库文件
-o 用来指定生成的文件名
-m64 Sun Studio 12开始使用的参数,代替-xarch=v9。通常与-xarch=sparc一起使用
-xcode=[V] 指定程序的ABI空间地址的生成方式。在做成shared library时须指定,Sun默认为-xcode=abs44,不能用这个参数来生成64位shared library。
参照资料:
http://docs.sun.com/app/docs/doc/820-1209/bjatt?l=ja&a=view
http://docs.sun.com/app/docs/doc/819-0389/advanced?l=ja
http://primeserver.fujitsu.com/unix/soft/opt/oemss12/
例:
cc -g -c a.c -lsocket -lnsl
cc -G b.c -o b.so ./a.o
cc -g a.c -I../include/
dbx调试用工具:
dbx 待调试可执行文件
(dbx) 命令行
print 打印指定变量或者表达式的值
run 执行程序
runargs 指定程序执行的参数。例如命令行上要用 ./prog 10 20作为启动命令的话,则使用(dbx) runargs 10 20进行启动
watch 监视某个变量的值,在每次stop后会自动显示出来
stop at 用于指定断点,主要是某行的断点。比如 stop at a.c:30 的含义是停止于a.c程序的第30行
stop in 用于指定断点,主要是针对函数名称。比如 stop in doSum 的含义是一旦doSum方法被调用,则停止
step 步进
step up 完成当前函数,并且停止到调用函数的下一行。
cont 继续执行。(continue)
check 指定rtc检查内容
-all 指定为全部
-leaks 指定为内存泄漏,访问异常等
-memuse 指定为监视内存使用
showleaks 显示内存泄漏等异常信息
showmemuse 显示内存的使用量
用rtc来进行调试等操作时,可以在dbx的帮助下,看到是否有内存没有声明就被访问,是否有越界访问等等信息。