linux修改最小帧长度,linux – 最小核心转储(仅限堆栈跟踪当前帧)

我以两种方式“解决”了这个问题:

>我为SIGSEGV安装了一个信号处理程序,并使用backtrace / backtrace_symbols打印出堆栈跟踪.我用-rdynamic编译了我的代码,所以即使在剥离调试信息后,我仍然得到一个带有意义名称的回溯(同时保持可执行文件足够紧凑).

我删除了调试信息并将其放在一个单独的文件中,我将使用strip将其保存在安全的地方;从那里,我将使用add22line与从回溯(地址)保存的信息来了解问题发生的位置.这样我只需要存储几个字节.

>或者,我发现我可以使用/ proc / self / coredump_filter来转储内存(将其内容设置为“0”):只有线程和proc信息,寄存器,堆栈跟踪等都保存在核心中.在this answer中查看更多

我仍然丢失可能很珍贵的信息(全球和地方变量内容,参数……).我可以很容易地找出要转储的页面,但遗憾的是没有办法为正常的核心转储指定“dump-these-pages”(除非你愿意去修补内核中的maydump()函数) ).

现在,我对2种解决方案感到非常满意(总比没有好……)我的下一步行动将是:

>看看将Breakpad移植到powerpc-linux有多困难:已经有powerpc-darwin和i386-linux这样有多难? 🙂

>尝试使用google-coredumper只转储当前ESP周围的几页(应该给我本地和参数)和“& some_global”(这应该给我全局).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值