问题标签 [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.
stack-trace - libc 的 backtrace_symbols() 和 libunwind 的 unw_get_proc_name() 中的不同偏移量
我在我的程序中的某个时刻进行了堆栈跟踪。一次使用libc的backtrace_symbols()
功能,一次使用unw_get_proc_name()
来自libunwind。
backtrace_symbols() 输出:
unw_get_proc_name() 输出:
在这里您可以看到指令指针地址(0x7f6b47ce9004)是相同且正确的。backtrace_symbols()的函数偏移量0x97004
也是正确的,但不是我从unw_get_proc_name() ( ) 得到的那个。0x458e4
有人知道这里发生了什么以及可能导致偏移量差异的原因吗?
两种方法都使用类似的代码,如以下示例:
回溯():
自由风:
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。
binutils - 如何从 .a 文件中删除某个 .o 部分
我有一个包含一堆符号和对象的 .a 文件。有一个部分
我可以使用哪个 binutil 工具来删除整个部分?
c - 遍历堆栈帧是否安全?
在我之前的问题中,我试图查看是否可以以编程方式从其父进程获取子进程的堆栈跟踪。
我已经成功地做到了,但现在另一个问题出现在我的脑海中——在程序执行期间直接检查这些帧是否安全?我在这里将“安全”定义为“不会修改孩子堆栈上的值”。
例如,这是我从运行 NPB-Serial CG A 类基准测试中获得的示例堆栈跟踪:
我想通过复制每个堆栈指针条目处的值来获得堆栈的转储 - 例如,通过0x7ffe5e368e10
从该地址开始并将每个值复制到当前堆栈指针到一个单独的位置。
这样做有什么风险吗?或者我是否错误地考虑了这一点(例如,有一种更简单的方法可以做到这一点)?
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
完整的代码可以在下面的链接中找到。
android - 在 Android 5/Lollipop 上打印 C 堆栈跟踪
我正在尝试调试在 Android 5 上运行的用 C 语言编写的 JNI 代码。当调用我的一个函数时,我想将堆栈跟踪写入 adb 日志,以便查看从何处调用该函数。
我发现的第一个资源表明我需要使用 libcorkscrew,并包含如何使用该库的完整示例。不幸的是,似乎 libcorkscrew 从 Android 5 中消失了,现在应该使用 libunwind。对于我的项目,有几个问题:
将 libunwind 加入项目的说明很少和/或具有误导性——一些资源说从 github 下载项目并构建它(指示不起作用),其他资源表明该库已经是 Android 5 的一部分。
所有的示例都是用 C++ 编写的,而且似乎 libunwind 中的函数只有 C++ 绑定。由于我的代码是 C 而不是 C++,并且写入日志函数而不是通过 C++ 标准库,因此这是不可用的。
其中,我查看了以下页面:
有没有办法在 Android 5 上的 C 代码中获取堆栈跟踪而不会使程序崩溃?
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 的情况下工作。
linux - 未定义对符号“_ULx86_64_step”libunwind.so.8 的引用:添加符号时出错:命令行中缺少 DSO
我正在尝试编译 Caffe。
工作正常。但是进行测试会出现以下错误。
Debian GNU/Linux 8 (jessie) 64 位
给出这个错误
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
同样的问题:-(