问题标签 [libunwind]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2005 浏览

stack-trace - libc 的 backtrace_symbols() 和 libunwind 的 unw_get_proc_name() 中的不同偏移量

我在我的程序中的某个时刻进行了堆栈跟踪。一次使用libcbacktrace_symbols()功能,一次使用unw_get_proc_name()来自libunwind

backtrace_symbols() 输出:

unw_get_proc_name() 输出:

在这里您可以看到指令指针地址(0x7f6b47ce9004)是相同且正确的。backtrace_symbols()的函数偏移量0x97004也是正确的,但不是我从unw_get_proc_name() ( ) 得到的那个。0x458e4

有人知道这里发生了什么以及可能导致偏移量差异的原因吗?

两种方法都使用类似的代码,如以下示例:

回溯():

自由风:

0 投票
2 回答
2556 浏览

ios - 为 Mac 构建 libunwind

我正在尝试在 Mac 上为 iOS 和 Mac 构建 libunwind,我能够解决一些编译问题。

在 Mac 上构建

我使用

elf.h从 google 的 breakpad 项目中复制。

https://google-breakpad.googlecode.com/svn-history/r1017/trunk/src/common/android/include/elf.h

我现在收到以下错误:

任何人都可以帮我解决这个问题或者还有其他一些构建 libunwind 的程序吗?

我还想知道是否需要做其他事情来为 iOS 构建 libunwind。

0 投票
1 回答
317 浏览

binutils - 如何从 .a 文件中删除某个 .o 部分

我有一个包含一堆符号和对象的 .a 文件。有一个部分

我可以使用哪个 binutil 工具来删除整个部分?

0 投票
0 回答
102 浏览

c - 遍历堆栈帧是否安全?

我之前的问题中,我试图查看是否可以以编程方式从其父进程获取子进程的堆栈跟踪。

我已经成功地做到了,但现在另一个问题出现在我的脑海中——在程序执行期间直接检查这些帧是否安全?我在这里将“安全”定义为“不会修改孩子堆栈上的值”。

例如,这是我从运行 NPB-Serial CG A 类基准测试中获得的示例堆栈跟踪:

我想通过复制每个堆栈指针条目处的值来获得堆栈的转储 - 例如,通过0x7ffe5e368e10从该地址开始并将每个值复制到当前堆栈指针到一个单独的位置。

这样做有什么风险吗?或者我是否错误地考虑了这一点(例如,有一种更简单的方法可以做到这一点)?

0 投票
2 回答
2915 浏览

eclipse - 错误:在 android ndk 中构建 libunwind 时需要注册

我想在 Eclipse 中使用 ndk r10d 从 Android 源代码构建 libunwind。但是我在编译 "Gresume.c" 时失败了,并且在 asm 代码中失败了。我无法理解asm代码,我搜索了任何地方都找不到有同样问题的人,所以我希望有人能帮助我。

代码的错误行是:

错误输出:

[armeabi] 编译拇指:MyBacktrace <= Gresume.c /var/folders/g7/9gd3cwy96z12qt3vlf7sc5q80000gn/T//cc6jsBSj.s:汇编程序消息:/var/folders/g7/9gd3cwy96z12qt3vlf7sc5q80000gn/T//cc6jsBSj.s:88:错误: lo 需要注册 -- `ldmia r2,{r4-r12,lr}' make: *** [obj/local/armeabi/objs/MyBacktrace/libunwind/src/arm/Gresume.o] 错误 1

完整的代码可以在下面的链接中找到。

0 投票
2 回答
1733 浏览

android - 在 Android 5/Lollipop 上打印 C 堆栈跟踪

我正在尝试调试在 Android 5 上运行的用 C 语言编写的 JNI 代码。当调用我的一个函数时,我想将堆栈跟踪写入 adb 日志,以便查看从何处调用该函数。

我发现的第一个资源表明我需要使用 libcorkscrew,并包含如何使用该库的完整示例。不幸的是,似乎 libcorkscrew 从 Android 5 中消失了,现在应该使用 libunwind。对于我的项目,有几个问题:

  1. 将 libunwind 加入项目的说明很少和/或具有误导性——一些资源说从 github 下载项目并构建它(指示不起作用),其他资源表明该库已经是 Android 5 的一部分。

  2. 所有的示例都是用 C++ 编写的,而且似乎 libunwind 中的函数只有 C++ 绑定。由于我的代码是 C 而不是 C++,并且写入日志函数而不是通过 C++ 标准库,因此这是不可用的。

其中,我查看了以下页面:

  1. 带有 libunwind 的 Android Lollipop 上的本机堆栈跟踪

  2. Android 5.0 中没有“libcorkscrew”...

  3. Android NDK:获取回溯

有没有办法在 Android 5 上的 C 代码中获取堆栈跟踪而不会使程序崩溃?

0 投票
0 回答
209 浏览

c++ - 将 gperftools 与 Jetson TX1 开发套件一起使用

我被推荐使用 gperftools 来简单快速地分析我的代码。此外,-lprofiler 的集成已经在我得到的代码的 CMAKE 中完成。现在我将源代码迁移到 Jetson TX1 并且运行良好,我尝试使用 gperftools。

不幸的是,当我使用 perftools 启动程序时,分段错误开始出现

我已经阅读了文档,他们谈到了在 64 位 Linux 上使用正确的 libunwind。不幸的是,给定的库(0.99 libunwind,http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-beta.tar.gz)似乎不喜欢 Tegra 平台。

首先,config.guess 有一个问题,我必须用位于 /usr/share/automake*/ 中的那个进行更改。

然后它会像这样出错:

我尝试使用主树,因为他们添加了 AARCH64(出现在错误消息中),但随后我收到其他消息:

  • 任何人都能够在 Tegra Dev Kit 或类似平台上使用 gperftools 吗?
  • libunwind 是段错误问题的一部分吗?代码再次在没有 -lprofiler 和 CPUPROFILER 的情况下工作。
0 投票
1 回答
1100 浏览

linux - 未定义对符号“_ULx86_64_step”libunwind.so.8 的引用:添加符号时出错:命令行中缺少 DSO

我正在尝试编译 Caffe。

工作正常。但是进行测试会出现以下错误。

Debian GNU/Linux 8 (jessie) 64 位

给出这个错误

0 投票
0 回答
546 浏览

c++ - 在 ARMV7HF 或 ARMV5TE 守护程序应用程序上使用 libunwind 没有堆栈跟踪深度

我编写了一个 C++ 应用程序(守护程序),它存在一些由于分段错误导致应用程序崩溃的问题。

要获取有关发生崩溃的代码的信息,我使用 libunwind。这在 x86_x64 linux 系统上运行良好。我得到了一个很好的堆栈跟踪。但是在 ARM 架构上,堆栈跟踪仅包含堆栈到“守护程序代码”本身,而不是我使用的共享库

我正在使用 gcc 4.9(用于 arm arm-linux-gnueabihf-g++4.9)我正在使用以下参数在调试模式(-g)下构建库和守护程序以获取堆栈跟踪表

对于我用于共享库的链接器

这是 x86 的示例堆栈跟踪

这里是来自手臂设备的痕迹。共享库的堆栈信息似乎不存在?!

以下是用于构建从信号处理程序调用的堆栈跟踪的代码摘要:

这里是守护进程本身的摘要:

如果我错过了一些编译器标志,有人知道吗?有什么遗漏吗?我发现了很多帖子,并且都提到了提到的编译器标志或 libunwind。我已经尝试了我发现的其他几个代码,但它们只给了我 1 的堆栈深度谢谢!

编辑 11.11.2016:
为了测试,我构建了静态库而不是共享库并将它们添加到应用程序中,因此不再有动态链接。不幸的是,堆栈跟踪是同样糟糕的。

我什至尝试用拇指模式编译整个东西,并将 arm 编译器更改为 gcc5/g++5

同样的问题:-(

0 投票
0 回答
208 浏览

c++ - 无法编译 boost::stacktrace

问题是关于以下库,预计它将尝试成为 boost 的一部分。

https://github.com/apolukhin/stacktrace

尝试使用此 makefile 进行编译:

这是输出: