免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4297 | 回复: 10
打印 上一主题 下一主题

关于进程黑匣子的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-15 10:30 |只看该作者 |倒序浏览
进程黑匣子指的是进程异常退出,保存该进程退出前的栈帧信息。因为现在我的环境是嵌入式目标板,目标板子上跑有一些进程,我想写一个模块来监控这些进程
core dump后,能够保存其退出的栈帧信息。问题是:
1. 使用不了backtrace函数调用,因为这个只是打印本进程的栈帧信息。而我的是想去监控别的进程。

2.可以利用linux的core dump机制生成core文件。问题是目标板的资源非常少flash只有8M。移植不了GDB。
  不过我想单单移植GDB的corelow模块以及backtrace命令,发现很复杂,移植不了。不知道各位有没有什么
  好的建议,或者做过这块的有什么好的做法。

论坛徽章:
1
射手座
日期:2014-08-04 16:49:43
2 [报告]
发表于 2011-12-15 10:38 |只看该作者
NFS.......

论坛徽章:
0
3 [报告]
发表于 2011-12-15 10:58 |只看该作者
这个肯定想过,问题是目标板作为产品,环境一旦出现问题,现场不允许使用

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2011-12-15 12:29 |只看该作者
可以利用linux的core dump机制生成core文件。问题是目标板的资源非常少flash只有8M。移植不了GDB。
qihaimou 发表于 2011-12-15 10:30



    进程异常终止后想办法把 core 文件保存下来,然后放在你的开发机器(例如 PC)上通过 GDB 查看异常时的调用栈。

论坛徽章:
0
5 [报告]
发表于 2011-12-16 09:11 |只看该作者
呵呵,我也觉得在嵌入式产品中保存core文件的做法是最简单了,前面两位的建议都很好。其实假如能够将GDB裁减那就是最好的了,可是网上相关资料非常少,自己尝试去移植corelow模块,发现行不通,与其他模块涉及太多东西了。这个模块有些公司是有做过,但不知道具体的思路是怎样子的。

论坛徽章:
0
6 [报告]
发表于 2011-12-16 11:27 |只看该作者
在进程中截获断错误信号,在进程错误退出前调用backtrace以得到栈帧信息,并写入某个文件中。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2011-12-16 12:33 |只看该作者
呵呵,我也觉得在嵌入式产品中保存core文件的做法是最简单了,前面两位的建议都很好。其实假如能够将GDB裁减 ...
qihaimou 发表于 2011-12-16 09:11



    GDB 在嵌入式中的使用一般都是板子上跑程序+GDB server,然后在 PC 机上运行 GDB 连到板子上调试,而不是裁减 GDB。就算你裁减了 GDB,你准备怎么和运行在板子上的 GDB 交互?

论坛徽章:
0
8 [报告]
发表于 2011-12-16 13:51 |只看该作者
GDB 在嵌入式中的使用一般都是板子上跑程序+GDB server,然后在 PC 机上运行 GDB 连到板子上调试 ...
MMMIX 发表于 2011-12-16 12:33



    因为板子上的资源比较少,原来就是打算裁减GDB移植到板子上就可以了。这样就可以脱离PC机了。

论坛徽章:
0
9 [报告]
发表于 2011-12-16 13:58 |只看该作者
在进程中截获断错误信号,在进程错误退出前调用backtrace以得到栈帧信息,并写入某个文件中。
qqrilxk 发表于 2011-12-16 11:27



    这个调用backtrace只能使用在本进程啊,不过父子进程的话使用ptrace系统调用网上查了一下貌似可以将子进程的栈帧信息打印出来。
我调了一下,打印出来的栈帧地址不正确。另外的话假如一个进程让父进程来跟踪,有没有风险。

论坛徽章:
0
10 [报告]
发表于 2011-12-16 14:53 |只看该作者
为什么非得搞一个进程来跟踪呢? 由本进程打印出调用栈不行吗? 哪个进程出问题了,这进程自身打印出信息,这不就是你需要的吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP