请教GDB的使用问题

zzbwang 2005-08-19 08:26:26
我在开发一个大程序时,遇到一个问题,程序有时会退出。使用GDB运行这个程序时,程序退出后GDB看不到任何状态(报告说找不到进程,捕获得到通用寄存器)。我不知道怎么用core dump功能来对付这种情况,请大侠指教!

用printf打印跟踪,发现程序退出是因为有一个函数会被反复调用,而这个函数整个用mutex做成原子操作。程序退出是因为某次调用进入这个函数后,没有正常退出这个函数(函数入口和出口都有printf打印状态)。可能是因为内存操作越界或者指针指向非法内存区域等原因。因为不知道函数调用出错导致程序退出的原因,所以无法使用条件断点查看。

请教各位大侠,我这种情况应该怎么定位问题原因?用GDB可以吗?

...全文
136 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tb01412 2005-08-22
  • 打赏
  • 举报
回复
在图形界面上用DDD来调试
sharkhuang 2005-08-21
  • 打赏
  • 举报
回复
用core之前用ulimit 设置一下
sharkhuang 2005-08-21
  • 打赏
  • 举报
回复
gdb xxxx
core core
bt

就可以看到栈信息
hbcb 2005-08-20
  • 打赏
  • 举报
回复
我最近也发现不太会使用gdb,只好用最原始的printf的方法了,原来用过UNIX下的sdb,用起来比较容易
yjf7888 2005-08-20
  • 打赏
  • 举报
回复
如果确信你的函数没问题,查一下其他地方
zzbwang 2005-08-20
  • 打赏
  • 举报
回复
我解决这个问题了。使用的是linux的core dump功能,方法是使用ulimit使linux核心生成core dump文件,然后用gdb查看dump之前的程序状态。原因是内存写越界。linux的core dump真是不错。
loveisbug 2005-08-20
  • 打赏
  • 举报
回复
程序退出是因为某次调用进入这个函数后,没有正常退出这个函数(函数入口和出口都有printf打印状态)。

在这个函数的所有可能出口加断点或打印。

23,118

社区成员

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

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