高分求教GDB问题

tb01412 2005-02-02 07:42:54
我现在有一个比较复杂的程序,在一台嵌入式操作系统上运行,经常会死机(不仅仅是程序死,而是系统崩了),我想用GDB来调试,有谁能告诉我怎样调?
死机是随机的,也就是说并不是程序运行在某个特定的地方死。
GDB可以跟踪系统内核进程吗?可以跟踪进系统函数吗?如何在GDB中查看汇编代码?
...全文
173 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tb01412 2005-02-04
  • 打赏
  • 举报
回复
codedump是如何使用的?
backtrace是如何使用的?
转转耳朵 2005-02-04
  • 打赏
  • 举报
回复
那就用gdb跑着,等什么时候crash了,再backtrace找出错的地方好了。
yjf7888 2005-02-04
  • 打赏
  • 举报
回复
关注
datuhao 2005-02-04
  • 打赏
  • 举报
回复
不知道什么时候会崩溃的问题,用coredump是最好的方法,当然配合日志更好定位问题

想跟踪系统调用的话用strace看吧
gettext 2005-02-04
  • 打赏
  • 举报
回复
这种bug你不知道问题出什么地方,GDB也不好使阿。 Anyway, 祝你好运。
datuhao 2005-02-04
  • 打赏
  • 举报
回复
关于coredump怎么使用你可以去网上搜下,是程序运行崩溃时系统自动生成的一个映象文件,可以用gdb来调试这个文件定位错误。不过不知道你所运行的操作系统是否支持

backtrace是gdb中用来看当前堆栈的命令
tb01412 2005-02-03
  • 打赏
  • 举报
回复
我们这个项目代码有五六十万行,其中可能出现问题的地方太多太多了,所以只能用一种方法让系统死机的时候的出错信息记录下来,才有可能看出问题所在,但如何用GDB来记录死机时的系统信息呢?
如果用打印语句的话,我的程序太大,不可能在每个地方都设打印语句吧?或是在每个地方都记录入日志!

gettext 2005-02-03
  • 打赏
  • 举报
回复
“死机是随机的”,这种bug太难调。尤其是死机周期比较长。可能是内存出问题了。
如果你的系统是模块化的,就一个模块一个模块去掉,看什么地方出的问题。或者用efence查一下内存。
walkany 2005-02-03
  • 打赏
  • 举报
回复
让他频繁死机找到死机的规律,然后就可以找到问题原因,然后模块。
sharkhuang 2005-02-03
  • 打赏
  • 举报
回复
attach pid
系统调用是进不去的。
yanghuajia 2005-02-03
  • 打赏
  • 举报
回复
gdbserver
转转耳朵 2005-02-03
  • 打赏
  • 举报
回复
在gdb中查看汇编代码可以用disassemble,汇编单步用si和ni,跟进系统函数没试过,估计只能是汇编码了,除非你找到这个函数的源码。
不过比较复杂的东西我的做法是先找几个疑点,用打印的方式先把怀疑有问题的变量打出来,等范围比较小了再用gdb,不然会累死的。
嵌入式没玩过,没什么建议。
lxhong1980 2005-02-02
  • 打赏
  • 举报
回复
用打印日志方式调试吧
wx341944809 2005-02-02
  • 打赏
  • 举报
回复
GDB是什么东西?

23,116

社区成员

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

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