阅读内容

Linux编程快速入门

编译和调试

[日期:2008-10-05] 来源: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

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



相关资讯       linux编程 
本文评论       全部评论
发表评论
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款


点评: 字数
姓名:

L
I
N
U
X


GOOGLE搜索
Google