gpt4 book ai didi

stack-trace - 可以使用 libSegFault.so 来获取 SIGABRT 的回溯吗?

转载 作者:行者123 更新时间:2023-12-03 10:14:33 30 4
gpt4 key购买 nike

神奇的咒语

LD_PRELOAD=/lib/libSegFault.so someapp

运行 someapp使用 libSegFault.so 提供有关 SIGSEGV 的回溯信息,如 many 中所述 different places .

除了使用 signal(7)类似的方法导致 SIGABRT调用 SIGSEGV处理程序,有什么方法可以让 libSegFault 为 assert(3) 提供回溯信息失败?

最佳答案

env SEGFAULT_SIGNALS="abrt segv" LD_PRELOAD=/lib/libSegFault.so someapp

请注意,预加载库的实际路径可能不同。在我的机器上,我会使用
env SEGFAULT_SIGNALS="abrt segv" LD_PRELOAD=/lib/x86_64-linux-gnu/libSegFault.so some-64bit-app

或者
env SEGFAULT_SIGNALS="abrt segv" LD_PRELOAD=/lib/i386-linux-gnu/libSegFault.so some-32bit-app

取决于我正在运行的应用程序是编译为 64 位还是 32 位。 (您可以使用 file 来查看。)

source告诉我们有三个环境变量定义了 libSegFault.so行为:
  • SEGFAULT_SIGNALS :导致堆栈跟踪的信号列表。
    默认为 SIGSEGV .已定义但为空的 SEGFAULT_SIGNALS意味着没有信号导致堆栈跟踪。
    支持的值为 segv , ill , abrt , fpe , bus在具有 SIGBUS 信号的系统上,stkflt在具有 SIGSTKFLT 信号的系统上,以及 all对于所有这些。
  • SEGFAULT_USE_ALTSTACK : 如果在环境中定义,libSegFault.so对堆栈跟踪信号使用备用堆栈。
    如果您正在调试堆栈损坏,这可能会派上用场。
  • SEGFAULT_OUTPUT_NAME : 如果在环境中定义,堆栈跟踪将写入此文件而不是标准错误。

  • 老实说,我最初是通过使用 strings /lib/libSegFault.so | sed -e '/[^0-9A-Z_]/ d' 检查库来发现这些的。 .所有标准库( libSegFault.so 已成为 GNU C 库的一部分)都可以通过环境变量进行调整,因此使用类似该命令的命令来转储任何看起来像环境变量名称的字符串是查找要搜索的内容的快速方法。在 "SEGFAULT_SIGNALS" "SEGFAULT_OUTPUT_NAME" 上进行网络搜索产生许多有用的链接;看到它现在是 GNU C 库的一部分,我去了 source git 文件,找到了库的实际源文件,并发布了我的答案。

    关于stack-trace - 可以使用 libSegFault.so 来获取 SIGABRT 的回溯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18706496/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com