⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000002.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 2 页
字号:
452&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>453&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;message;&nbsp;<BR>454&nbsp;<BR>455&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initial();&nbsp;<BR>456&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;State=WAITING;&nbsp;<BR>457&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Use&nbsp;Control-C&nbsp;to&nbsp;halt&nbsp;\n&quot;);&nbsp;<BR>458&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGALRM,AlarmMessage);&nbsp;<BR>459&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGINT,InteruptMessage);&nbsp;<BR>460&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGUSR2,IoMessage);&nbsp;<BR>(gdb)&nbsp;l&nbsp;<BR>461&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alarm(TimeSlot);&nbsp;<BR>462&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(;;)&nbsp;<BR>463&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>464&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message=GetMessage();&nbsp;<BR>465&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(message)&nbsp;<BR>466&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>467&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;INTERRUPT&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Use&nbsp;Control-C&nbsp;t;&nbsp;<BR>&nbsp;<BR>468&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;<BR>469&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;CHILD_IO:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WaitingIo();&nbsp;<BR>470&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;<BR>显示了原代码,现在在AlarmMessage上加断点。&nbsp;<BR>(gdb)&nbsp;b&nbsp;AlarmMessage&nbsp;<BR>Breakpoint&nbsp;2&nbsp;at&nbsp;0x8048ee3:&nbsp;file&nbsp;os.c,&nbsp;line&nbsp;259.&nbsp;<BR>(gdb)&nbsp;<BR>然后我们继续运行程序。&nbsp;<BR>(gdb)c&nbsp;<BR>c或continue命令让我们继续被中断的程序。&nbsp;显示:&nbsp;<BR>Continuing.&nbsp;<BR>Use&nbsp;Control-C&nbsp;to&nbsp;halt&nbsp;<BR>&nbsp;<BR>Breakpoint&nbsp;2,&nbsp;AlarmMessage&nbsp;()&nbsp;at&nbsp;os.c:259&nbsp;<BR>259&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClearSignal();&nbsp;<BR>注意我们下一句语句就是ClearSignal();&nbsp;<BR>我们用s/step跟踪进入这个函数看看它是干什么的。&nbsp;<BR>(gdb)&nbsp;s&nbsp;<BR>ClearSignal&nbsp;()&nbsp;at&nbsp;os.c:227&nbsp;<BR>227&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGINT,SIG_IGN);&nbsp;<BR>用l命令列出原代码:&nbsp;<BR>(gdb)&nbsp;l&nbsp;<BR>222&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>223&nbsp;<BR>224&nbsp;<BR>225&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;ClearSignal()&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Clear&nbsp;other&nbsp;signals&nbsp;*/&nbsp;<BR>226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>227&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGINT,SIG_IGN);&nbsp;<BR>228&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGALRM,SIG_IGN);&nbsp;<BR>229&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGUSR2,SIG_IGN);&nbsp;<BR>230&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>231&nbsp;<BR>(gdb)&nbsp;<BR>我们可以用s命令继续跟踪。现在让我们来试试bt或backtrace命令。这个命令可以&nbsp;<BR>显示栈中的内容。&nbsp;<BR>(gdb)&nbsp;bt&nbsp;<BR>#0&nbsp;&nbsp;ClearSignal&nbsp;()&nbsp;at&nbsp;os.c:227&nbsp;<BR>#1&nbsp;&nbsp;0x8048ee8&nbsp;in&nbsp;AlarmMessage&nbsp;()&nbsp;at&nbsp;os.c:259&nbsp;<BR>#2&nbsp;&nbsp;0xbffffaec&nbsp;in&nbsp;??&nbsp;()&nbsp;<BR>#3&nbsp;&nbsp;0x80486ae&nbsp;in&nbsp;___crt_dummy__&nbsp;()&nbsp;<BR>(gdb)&nbsp;<BR>大家一定能看懂显示的意思。栈顶是AlarmMessage,接下来的函数没有名字--就是&nbsp;<BR>没有原代码符号。这显示了函数调用的嵌套。&nbsp;<BR>好了,我们跟踪了半天还没有检查过变量的值呢。检查表达式的值的命令是p或print&nbsp;<BR>格式是p&nbsp;&lt;表达式&gt;&nbsp;<BR>444444让我们来找一个变量来看看。:-)&nbsp;<BR>(gdb)l&nbsp;1&nbsp;<BR>还记得l的作用吗?l或list显示原代码符号,l或list加&lt;行号&gt;就显示从&lt;行号&gt;开始的&nbsp;<BR>原代码。好了找到一个让我们来看看WaitingQueue的内容&nbsp;<BR>(gdb)&nbsp;p&nbsp;WaitingQueue&nbsp;<BR>$1&nbsp;=&nbsp;{1,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5,&nbsp;6,&nbsp;0}&nbsp;<BR>(gdb)&nbsp;<BR>WaitingQueue是一个数组,gdb还支持结构的显示,&nbsp;<BR>(gdb)&nbsp;p&nbsp;Pcb&nbsp;<BR>$2&nbsp;=&nbsp;{{Pid&nbsp;=&nbsp;0,&nbsp;State&nbsp;=&nbsp;0,&nbsp;Prior&nbsp;=&nbsp;0,&nbsp;pc&nbsp;=&nbsp;0},&nbsp;{Pid&nbsp;=&nbsp;31474,&nbsp;State&nbsp;=&nbsp;2,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Prior&nbsp;=&nbsp;24,&nbsp;pc&nbsp;=&nbsp;0},&nbsp;{Pid&nbsp;=&nbsp;31475,&nbsp;State&nbsp;=&nbsp;2,&nbsp;Prior&nbsp;=&nbsp;19,&nbsp;pc&nbsp;=&nbsp;0},&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Pid&nbsp;=&nbsp;31476,&nbsp;State&nbsp;=&nbsp;2,&nbsp;Prior&nbsp;=&nbsp;16,&nbsp;pc&nbsp;=&nbsp;0},&nbsp;{Pid&nbsp;=&nbsp;31477,&nbsp;State&nbsp;=&nbsp;2,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Prior&nbsp;=&nbsp;23,&nbsp;pc&nbsp;=&nbsp;0},&nbsp;{Pid&nbsp;=&nbsp;31478,&nbsp;State&nbsp;=&nbsp;2,&nbsp;Prior&nbsp;=&nbsp;22,&nbsp;pc&nbsp;=&nbsp;0},&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Pid&nbsp;=&nbsp;31479,&nbsp;State&nbsp;=&nbsp;2,&nbsp;Prior&nbsp;=&nbsp;20,&nbsp;pc&nbsp;=&nbsp;0}}&nbsp;<BR>(gdb)&nbsp;<BR>这里可以对照原程序看看。&nbsp;<BR>原文档里是一个调试过程,不过我想这里我已经把gdb的常用功能介绍了一遍,基本上&nbsp;<BR>可以用来调试程序了。:-)&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>※&nbsp;来源:&nbsp;中国科大BBS站&nbsp;[bbs.ustc.edu.cn]&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>※&nbsp;来源:·BBS&nbsp;水木调试站&nbsp;Leeward.lib.tsinghua.edu.cn·[FROM:&nbsp;202.200.37.100]&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -