Linux编程快速入门
Linux编程快速入门
整理了Linux编程快速入门的一些资料,分享给大家。
1. 了解编译器
编译xxx.c,产生可执行文件xxx
gcc xxx.c -o xxx
如果是C++写的
g++ -g xxx.c -o xxx
其中
#-g产生调试信息,用strip xxx #去除调试信息
其他选项:
-O 优化(保守级别,保证功能) -O4可能会改变代码行为
-Wall 所有的警告
其中象gcc是一个总包工头的角色,实际编译过程是:
(a)预处理: cc -E source.c
(b)编译: cc1
(c)优化optimizer
(d)生成汇编代码
cc -S source.c #生成汇编代码
(e)链接 linker-loader
2. 程序出错了,如何用gdb调试
gdb xxx
run "arguments"
---
设置断点
break debug_me.c:9
break main
例子:
break main
run "hello, world" "goodbye, world"
Starting program: /usr/home/choo/work/c-on-unix/debug_me
warning: Unable to find dynamic linker breakpoint function.
warning: GDB will be unable to debug shared library initializers
warning: and track explicitly loaded dynamic code.
Breakpoint 1, main (argc=1, argv=0xbffffba4) at debug_me.c:9
9 if (argc < 2) {
(gdb)
help break
help breakpoints
---
next 下一步
step 下一步(跟踪到函数里)
---
打”泶锸街
print i
---
where打印调用栈
frame 1 (切换到上一级)
print i
---
挂接(attach)已运行的程序
gdb debug_me 9561
---
调试有core dump的程序
gdb /path/to/program/debug_me core
可以where,frame,print
xxgdb gdb前端或ddd
|
【内容导航】 | |
第1页:编译和调试 | 第2页:进程 |
第3页:文件访问 | 第4页:管道和信号 |
第5页:较为复杂的在两个进程建立pipe | 第6页:命名管道(named pipes) |
第7页:使用kill发送信号 | 第8页:Sockets |
评论暂时关闭