问题标签 [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.
c++ - 是否有一种可移植/符合标准的方法来获取堆栈跟踪中的文件名和行号?
我刚读过
现在已经很老了(5年)。一些答案建议的解决方案允许您为每个堆栈帧获取函数的名称和偏移量(我猜在堆栈内)。但我(可能还有其他人)真正需要的是进行调用的源文件名和行号(假设代码是使用调试信息编译的)。与执行此操作的 glibc 的一部分相关的答案之一(libSegfault;请参阅此目录中的文件- segfault.c
, backtracesyms.c
, backtracesymsfd.c
) - 所以它是可能的。
我的问题是:
- 是否可以以独立于平台的方式或符合某些标准(POSIX??)的方式提取此信息
- 为什么 libunwind 不支持这个?(我认为不是,在浏览了他们的网站后)
- 这是否一定取决于您的编译器的 C/C++ 标准库(至少对于 C/C++ 应用程序)?
笔记:
- 你可以假设二进制文件有调试信息,所以在 C/C++ 的情况下,它是用
-g
;编译的。当然,在适当的库中,我们会检查调试信息是否可用。
c++ - 将库添加到 Cmake 项目
也许我根本找不到它,但我想在我的项目中添加一些代码(libunwind 在这里找到http://www.nongnu.org/libunwind/download.html)
这个库没有 CMakeLists。 txt 文件,当我尝试包含它时,cmake 抱怨这个事实。现在我只是将 libunwind 目录添加到我的外部代码中,并在我的主 CMakeLists.txt 中添加了一个引用
任何输入都会很棒。
c++ - 静态链接展开库会导致核心转储
此代码使用 -std=c++11 使用 g++ 编译。与 g++ 链接时,当libunwind被静态链接时,在捕捉到exerciseBug后(重新抛出后)程序崩溃。导致崩溃的 LDFLAGS:
-Wl,-Bstatic -lunwind -Wl,-Bdynamic -llzma
当libunwind动态链接时,代码正常工作。导致正常运行的 LDFLAGS:
-Wl,-Bstatic -Wl,-Bdynamic -lunwind -llzma
问题是为什么 libunwind 需要动态链接? (在 Ubuntu 16.04 上运行;g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609)
android - unw_init_remote 因 UNW_EBADREG 失败
在android上,在收集特定本机进程的痕迹时,我观察到该进程的特定线程的回溯没有被收集(使用libunwind收集回溯)。
第一次尝试:
第二次尝试:
从文档来看,-3
似乎是 UNW_EBADREG。但是我无法弄清楚这个错误代码到底是什么时候返回的?
任何指针表示赞赏!
c++ - Libunwind PC 值不适用于 addr2line
我正在尝试遵循链接中的示例: https ://eli.thegreenplace.net/2015/programmatic-access-to-the-call-stack-in-c/
但是我遇到了一些问题。我有一段像这样使用 libunwind 打印回溯信息的代码:
测试.cpp
运行此代码会产生如下输出,即程序计数器值:(function_name+0xoffset)
正如上面的链接中提到的,函数名称左侧的程序计数器值可以馈送到 addr2line 以获取文件名和行号信息。但是,每当我尝试这样做时(例如,对于函数 foo):
查看 objdump 文件后,我发现函数 foo 有一个调试条目:
当我将 DW_at_low_pc 的值输入到 addrline 时,它设法产生正确的输出。
首先为什么libunwind返回的PC值与DW_AT_low_pc的不同?
似乎 libunwind 正在为 PC 返回一个不正确的值,但如果是这种情况,那么 libunwind 如何获取函数名称?
有没有什么方法可以从 libunwind 给出 PC 值,我可以使用 addr2line 或其他命令行工具获取文件名和文件号?
感谢您的阅读,我知道这是一个很长的问题。
c++ - 为我的项目中的库链接 libunwind 时出现链接器错误
我正在运行这个命令——
但我得到这个链接器错误——
当我做 nm -DI 确实看到定义的符号 -
此外,libXYZMaster.so 的 ldd 表示 libunwind 已链接——
llvm - libunwind 是在 libcxxabi 中实现 abi 的吗?
当我意识到我实际上并不了解它们所扮演的角色时,我正在尝试构建libcxx
// libcxxabi
。libunwind
我检查了libcxxabi spci,发现它定义了 C++ 异常中使用的 API。libunwind
但是我找不到任何libunwind
关于libcxxabi
.
那么,libunwind
真的是这样,在中实现 ABI libcxxabi
,如果是,为什么我们有libcxxabi
?
android - cxx-stl\llvm-libc++\libs 文件夹下存在的不同库的用途是什么?
在 android ndk 中,在文件夹 sources\cxx-stl\llvm-libc++\libs\armeabi-v7a 下,我可以看到以下这些库。
libandroid_support.a
libc++.so
libc++_shared.so
libc++abi.a
libunwind.a
你能解释一下每一个的目的是什么。如果这些之间有任何依赖关系,请解释。
c++ - _Unwind_ 和 unw_ 函数(LLVM 的 libunwind)
我是 LLVM 的 libunwind 库的新手。能否请您告诉我libunwind提供的两组功能的目的和区别是什么:
- 带有前缀 _Unwind_ 的函数
- 带有前缀 unw_ 的函数
c++ - _Unwind_RaiseException 示例
我正在研究 LLVM 的 libunwind 库。我想写或看一个直接调用的简单示例
功能。有谁知道是否有使用此功能的示例或可以自己编写一个简单的示例?