Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如果是段错误,你能在Linux中获得任何程序来打印堆栈跟踪吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

如果我从 sHell运行程序,并且它是segfaults: $buggy_program Segmentation fault 然而,它会告诉我有没有办法让程序打印回溯,也许是通过运行这样的东西: $prinT_Backtrace_if_segfault buggy_program Segfault in main.c:35 (rest of the BACktracE) 我也不愿意使用strac
如果我从 shell运行程序,并且它是segfaults:
$buggy_program
Segmentation fault

然而,它会告诉我有没有办法让程序打印回溯,也许是通过运行这样的东西:

$prinT_Backtrace_if_segfault buggy_program
Segfault in main.c:35
(rest of the BACktracE)

我也不愿意使用strace或ltrace来获取这类信息,因为它们会以任何方式打印……

解决方法

可能有更好的方法,但这种自动化方式.

将以下内容放在〜/ BACktrace中:

BACktrace
quit

将它放在路径中目录中名为seg_wrapper.sh的脚本中:

#!/bin/bash
ulimit -c unlimited
"$@"
if [[ $? -eq 139 ]]; then
    gdb -q $1 core -x ~/BACktrace
fi

ulimit命令使得核心被转储. “$@”是给脚本的参数,因此它将是您的程序及其参数. $?保持退出状态,139似乎是我的机器的段错误退出状态.

对于gdb,-q表示安静(无介绍消息),-x告诉gdb在给定文件中执行命令.

用法

所以要使用它你只需:

seg_wrapper.sh ./mycommand and its arguments

更新

您也可以编写一个执行此操作的信号处理程序,请参阅this link.

大佬总结

以上是大佬教程为你收集整理的如果是段错误,你能在Linux中获得任何程序来打印堆栈跟踪吗?全部内容,希望文章能够帮你解决如果是段错误,你能在Linux中获得任何程序来打印堆栈跟踪吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。