转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> SyBase >> 正文
linux编程(2) GCC和GDB         ★★★★

linux编程(2) GCC和GDB

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1461 更新时间:2009/4/22 23:09:01
bsp;
 
468                                                     break; 
469                             case CHILD_IO:          WaitingIo(); 
470                                                     break; 
显示了原代码,现在在AlarmMessage上加断点。 
(gdb) b AlarmMessage 
Breakpoint 2 at 0x8048ee3: file os.c, line 259. 
(gdb)
 
然后我们继续运行程序。 
(gdb)c 
c或continue命令让我们继续被中断的程序。 显示: 
Continuing. 
Use Control-C to halt 
 
Breakpoint 2, AlarmMessage () at os.c:259 
259             ClearSignal();
 
注意我们下一句语句就是ClearSignal(); 
我们用s/step跟踪进入这个函数看看它是干什么的。 
(gdb) s 
ClearSignal () at os.c:227 
227             signal(SIGINT,SIG_IGN);
 
用l命令列出原代码: 
(gdb) l 
222     } 
223 
224 
225     void ClearSignal()    /* Clear other signals */ 
226     { 
227             signal(SIGINT,SIG_IGN); 
228             signal(SIGALRM,SIG_IGN); 
229             signal(SIGUSR2,SIG_IGN); 
230     } 
231 
(gdb) 
我们可以用s命令继续跟踪。现在让我们来试试bt或backtrace命令。这个命令可以 
显示栈中的内容。 
(gdb) bt 
#0  ClearSignal () at os.c:227 
#1  0x8048ee8 in AlarmMessage () at os.c:259 
#2  0xbffffaec in ?? () 
#3  0x80486ae in ___crt_dummy__ () 
(gdb)
 
大家一定能看懂显示的意思。栈顶是AlarmMessage,接下来的函数没有名字--就是 
没有原代码符号。这显示了函数调用的嵌套。 
好了,我们跟踪了半天还没有检查过变量的值呢。检查表达式的值的命令是p或print 
格式是p <表达式> 
444444让我们来找一个变量来看看。:-) 
(gdb)l 1 
还记得l的作用吗?l或list显示原代码符号,l或list加<行号>就显示从<行号>开始的 
原代码。好了找到一个让我们来看看WaitingQueue的内容 
(gdb) p WaitingQueue 
$1 = {1, 2, 3, 4, 5, 6, 0} 
(gdb)
 
WaitingQueue是一个数组,gdb还支持结构的显示, 
(gdb) p Pcb 
$2 = {{Pid = 0, State = 0, Prior = 0, pc = 0}, {Pid = 31474, State = 2, 
    Prior = 24, pc = 0}, {Pid = 31475, State = 2, Prior = 19, pc = 0}, { 
    Pid = 31476, State = 2, Prior = 16, pc = 0}, {Pid = 31477, State = 2, 
    Prior = 23, pc = 0}, {Pid = 31478, State = 2, Prior = 22, pc = 0}, { 
    Pid = 31479, State = 2, Prior = 20, pc = 0}} 
(gdb)
 
这里可以对照原程序看看。 
原文档里是一个调试过程,不过我想这里我已经把gdb的常用功能介绍了一遍,基本上 
可以用来调试程序了。:-) 

注:本文的资料大部分引用自
       1:《GCC技术参考大全》 清华大学出版社
       2:发 信 人:System_Killer(大家一起来发呆)           信区名称:Linux[4590] 
            信件提要:GDB(一) 
            原发信站:中国科大BBS站(Fri, 27 Mar 1998 02:31:49) 

上一页  [1] [2] 


[SyBase]在Linux中用gdb调试GCC程序  [SyBase]在Redhat Linux上安装 GCC 编译器过程
[MySql]Linux下AT90S8515单片机GCC编程点灯实验纪实  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台