如何用GDB调试某一线程死循环

老邓 2010-10-10 01:17:19
加精
目前Code::Blocks的CC BRANCH遇到一个奇怪的问题:在解析linux内核时,这两种情况下不会死循环:
1. 输出Debug信息,使用--debug-log运行选项,不会死循环
2. 输出Debug信息,使用--debug-log和--debug-log-to-file选项,也不会死循环

但,如果单独运行CB,再打开linux的内核工程(工程非常大,2.35MB,3.5万个文件,解析完成后达到130多万tokens),会在内存占用800MB的时候,出现死循环。

由于主界面是可以响应的,而且还可以顺利的关闭linux内核工程,所以死循环一定是发生在负责解析的子线程中。
我的问题是:如何用GDB调试某一线程死循环呢?

我尝试了:attach到目标进程,bt显示调用栈,但调用栈显示中除了一个stl_tree.h相关信息外,其他都是问号。
我该如何定位到发生死循环的函数?

或者提供下解决类似问题的思路?尝试??
谢谢!!

找到了一些资料,关键词:“gdb endless loop”、“gdb infinite loop”
http://www.unknownroad.com/rtfm/gdbtut/gdbinfloop.html
http://www.network-theory.co.uk/docs/gccintro/gccintro_76.html
http://www.cnblogs.com/dubingsky/archive/2009/07/08/1519525.html
...全文
6646 103 打赏 收藏 转发到动态 举报
写回复
用AI写文章
103 条回复
切换为时间正序
请发表友善的回复…
发表回复
joyjjjz 2011-06-23
  • 打赏
  • 举报
回复
学习~
flairpower 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 57 楼 loaden 的回复:]
引用 56 楼 paste 的回复:

GDB太有用了,
只是有时候在 eclipse cdt下它在启动的时候就死翘翘了,,悲具。。。

不知老邓有遇到这种情况没有啊?

我经常遇到,导致不能调试。。

我在CB下使用GDB,很少遇到启动失败的情况。
-g是肯定加了的,不过,有时奇怪的是bt显示不出来正确的调用栈。
另,多谢版主推荐。
[/Quote]

因为加-O优化参数了?
whygxb 2010-10-17
  • 打赏
  • 举报
回复
我按不动2
kaiiam 2010-10-17
  • 打赏
  • 举报
回复
这题其实适合初学者。
maygod 2010-10-17
  • 打赏
  • 举报
回复
dksfjsfjsfjsfjsf
CGQXYC 2010-10-16
  • 打赏
  • 举报
回复
对命令行下使用gdb了解不多。
平常用GUI前端用习惯了。
能否详细介绍一下?
zhakalamu 2010-10-16
  • 打赏
  • 举报
回复
关注学习下
q280085328 2010-10-16
  • 打赏
  • 举报
回复
关注学习下
zhjby 2010-10-15
  • 打赏
  • 举报
回复
ertgeh56ut5rit67o78pyup;87p;oo
hwuaxj_11 2010-10-15
  • 打赏
  • 举报
回复
非常牛
手机写程序 2010-10-15
  • 打赏
  • 举报
回复
用gdb调多线程不太可能,只能加打印信息或log.但你调死循环倒有点可能.可以把断点设在loop外面.
比如:

while(1)
{
if(exit)
break;
...
}

return;//断点设在这里,如果没激活就是死循环了.


hurongfz 2010-10-15
  • 打赏
  • 举报
回复
top 拿分 楼主居然死循环cpu必然高 top下不就知道了
zkwqxy2012 2010-10-15
  • 打赏
  • 举报
回复
1111111111111111111111111
jihen 2010-10-15
  • 打赏
  • 举报
回复
汗,调试到这地步
xiaoyiqing599 2010-10-14
  • 打赏
  • 举报
回复
顶起··········
ltlljl12 2010-10-14
  • 打赏
  • 举报
回复
很难度,顶了
OwenYang_cn 2010-10-14
  • 打赏
  • 举报
回复
我是来打JY的-_-!!!
superastar 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 70 楼 daliancat1984 的回复:]
codeblocks 这个东西现在linux下用~不过个人认为不如eclipse好用,我经常打开一个cb添加一个lib就无缘无故的死掉了~~且之前添加还不给保存~~~
[/Quote]
eclipse在QT下运行,也很慢。
superastar 2010-10-14
  • 打赏
  • 举报
回复
据我尝试,CodeBlock不能进入死循环,在循环外设断点,进入就死。
zhaoxinsomebody 2010-10-14
  • 打赏
  • 举报
回复
我是gdb的菜鸟,不过正如某人说过一样,添加调试信息也是好办法,简单又直观。还有top看进程占用应该也能分析。
加载更多回复(61)

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧