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
  • 6
  • 7
  • 8
  • 下一页
【内容导航】
第1页:编译和调试 第2页:进程
第3页:文件访问 第4页:管道和信号
第5页:较为复杂的在两个进程建立pipe 第6页:命名管道(named pipes)
第7页:使用kill发送信号 第8页:Sockets

相关内容