【问题标题】:Is there a way to show call stack programatically on OpenBSD?有没有办法在 OpenBSD 上以编程方式显示调用堆栈?
【发布时间】:2017-09-23 09:46:47
【问题描述】:

Linux 具有backtrace() 函数,这是一个 GNU 扩展。

FreeBSD 从 10.0 版开始也引入了backtrace() 函数,从 7.0 版开始引入了 NetBSD。

有什么方法可以在 OpenBSD 上实现这一点吗?

【问题讨论】:

  • 如果这样的 API 可用于 OpenBSD,我没有答案。但是如果你想实现一个,请看看你是否可以在 OpenBSD 中使用“libunwind-ptrace”。如果已移植,请使用此链接教程获取回溯 .. gist.github.com/crimsonwoods/4122796
  • @AditYa 不幸的是,libunwind 不支持 OpenBSD。我也尝试编译它,但无济于事。

标签: c backtrace openbsd


【解决方案1】:

不确定它何时首次出现,但有一个用于 OpenBSD 6.1 的 libexecinfo,它实现了 backtrace()backtrace_symbols() 函数:

{openbsd-amd64 ~}$ pkg_info libexecinfo
Information for inst:libexecinfo-0.3v0

Comment:
clone of backtrace facility found in the GNU libc

Description:
This is a quick-n-dirty BSD licensed clone of backtrace facility found
in the GNU libc, mainly intended for porting linuxish code to BSD
platforms, however it can be used at any platform which has a gcc
compiler.

Maintainer: The OpenBSD ports mailing-list <ports@openbsd.org>

WWW: https://github.com/conformal/backtrace/wiki

【讨论】:

  • 我最初在 OpenBSD 5.8 上进行测试,该软件包不可用。但问题与版本无关,我认为这是更好的答案。
【解决方案2】:

在 OpenBSD 上,您可以使用this implementation

【讨论】:

  • 谢谢,不知道 gnulib。它的问题是它没有编译为库,而是必须直接集成到项目中,这意味着项目还必须使用 GNU 自动工具。
  • 您不能只复制文件并将它们与您的构建系统集成吗?
  • 这并不容易,因为: 1. 标头 (execinfo.h) 不是静态的,而是从 execinfo.in.h 生成的; 2. 除了头文件/源文件,还有m4文件,其中包含代码中使用的宏
  • 仔细查看源代码(execinfo.cexecinfo.in.h)似乎连功能都没有实现。源文件只包含头文件,头文件包含一个空实现。
  • 哦,那很糟糕。在源代码伪造中还有另一个特定于 openbsd 的实现......
猜你喜欢
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多