1.gcc
如果加-c选项仅编译(compile),只会生成xxx.ogcc -c main.c gcc -c main.c -o main.o如果加上-o选项,则生成可执行文件
gcc -o main.out main.o #将main.o链接成可执行文件main.out gcc -o main.out main.c #将main.c链接成可执行文件main.out如果加上-Wall 选项,可以自动提示一些出错警告的信息
gcc -Wall -o main.out main.c
如果加-g选项(默认g2,可选g1~g3),主要用于与GDB的调试(可显示函数名 行号等)
-g1:与g2相比,没有局部变量及行号
-g2或g(默认):调试信息包含行号、扩展的符号表、局部或外部变量信息
-g3:与g2相比,增加源代码中的定义的宏
gcc -g2 test.c -o test_coredump #g2等级
gcc test.c -o test_coredump #关闭调试开关
2.gdb
下载源码gdb-7.11.tar.gz:http://ftp.gnu.org/gnu/gdb/ 解压:tar zxvf gdb-7.11.tar.gz 配置编译条件:./configure --host=arm-arago-linux-gnueabi --enable-shared --prefix=/mnt/hgfs/Share/work/gdbbin CC=arm-arago-linux-gnueabi-gcc --host:交叉编译工具链前缀 --enable-shared 动态编译 --prefix bin安装目录 CC 交叉编译工具xxx-gcc 编译&安装:make&make install --host:交叉编译工具链前缀 --enable-shared 动态编译 --prefix bin安装目录 CC 交叉编译工具xxx-gcc 最后将生成的gdb二进制文件复制到嵌入式开发板中即可
3.配置文件系统生成core文件
step1:busybox制作文件系统时,使能coredump功能 FEATURE_INIT_COREDUMPS [=y] step2:嵌入式开发板配置 a.查看coredump选项是否打开 #ulimit -a time(seconds) unlimited#无限制 file(blocks) unlimited data(kb) unlimited stack(kb) 8192 #指定大小 8192Kb coredump(blocks) 0 #关闭不产生core文件 memory(kb) unlimited locked memory(kb) 64 process 1980 nofiles 1024 vmemory(kb) unlimited locks unlimited b.关闭core文件生成 #ulimit -c 0 c.使能core文件生成, #ulimit -c unlimited d.配置core文件输出路径及文件名 设置proc/sys/kernel/core_pattern文件可以改变文件名及存储路径 如:echo "/home/core-%e-%p-%t" > /proc/sys/kernel/core_pattern core-文件名-pid-时间戳 其他参数: %p - insert pid into filename 添加pid %u - insert current uid into filename 添加当前uid %g - insert current gid into filename 添加当前gid %s - insert signal that caused the coredump into the filename 添加导致产生core的信号 %t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间 %h - insert hostname where the coredump happened into filename 添加主机名 %e - insert coredumping executable name into filename 添加命令名
*没生成coredump的原因:
1.文件大小限制,可用ulimit -a产看
2.进程退出所产生的信号不产生core文件
3.进程退出成为了僵尸进程
4.gdb使用方法
应用测试1---程序异常分析step1:正常编译,运行程序 (程序异常时会产生core-dump文件)
step2:gdb [可执行程序] core-file #example :gdb test.out Core_test.out_xxxx
step3:bt #查看函数调用及参数
(gdb) bt #0 0x00008470 in core_test () at main.c:8 #1 0x00008494 in main () at main.c:14
应用测试2---单步调试
step1:gdb [可执行程序]
step2:start #开始运行程序
查看所用线程堆栈信息: thread apply all bt
参考:
Makefile的三个变量$@ $^ $<https://my.oschina.net/u/1413984/blog/199029
GCC优化级别及GDB调试级别:
http://www.360doc.com/content/11/1204/22/532901_169714672.shtml
用GDB调试程序(跟我一起写MakeFile作者陈皓):
http://blog.csdn.net/haoel/article/details/2879
GDB官网文档:
https://www.gnu.org/software/gdb/documentation/
使用GDB进行嵌入式远程调试:
http://www.cnblogs.com/lidabo/p/5645655.html
LINUX core dump详解 & GDB调试
http://blog.csdn.net/ariessurfer/article/details/7648938
嵌入式gdb工具编译
http://blog.csdn.net/feixiang3839/article/details/41093021
信息量很大,不能完全理解: