问题标签 [addr2line]

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 回答
1003 浏览

c - 从 C 库中获取当前执行路径

我正在用 C 编写一个记录器库,目前正在尝试通过使用addr2line. 为此,我需要能够获取当前可执行文件的路径。目前我只关心 linux,但也会为 Mac OS 支持而努力。

对于 linux 支持,我正在尝试使用readlink()/proc/self/exe解析当前可执行文件的路径:

返回的路径readlink()是:/home/nax��?. 第一部分是正确的:/home/na,但之后的一切都是胡言乱语。

为什么我无法通过这种方式获取当前的执行路径?

0 投票
0 回答
183 浏览

c - 使用 gaddr2line 时的 BFD 未知命令

我正在尝试使用gaddr2line打印更漂亮的回溯符号版本。我只是backtrace()通过gaddr2line使用popen. 在 linux 下使用addr2line可以正常工作,但由于某种原因,我gaddr2line在 OS X 上使用时遇到奇怪的错误。在 Mac OS 上尝试这个时,我不断收到BFD: ... : unknown load command ... 一些帖子提到 GDB,所以我尝试用自制软件安装它,但那没有没有帮助。

这是我的代码:

这是输出:

0 投票
0 回答
668 浏览

android - 如何手动将 Android SIGSEGV 地址映射到链接器映射文件?

我的 Java 应用程序有一个 JNI 层,用于与本机 C++ 库进行通信。当应用程序空闲大约三 (3) 分钟时,应用程序崩溃,LogCat 显示以下堆栈跟踪:

崩溃似乎表明崩溃发生在我的共享库 libwrappersjni.so 中。我有一个链接器映射文件,通过使用 -XLinker 和 -Map gcc 链接器选项创建。地图文件列出了具有相对偏移量的符号,例如:

我似乎缺少的是我的应用程序加载到内存中的实际地址。如果我知道我会从 pc(程序计数器)寄存器中减去加载地址以查明崩溃代码的位置。

是否有一种直观的方法可以将在 pc 寄存器中找到的绝对崩溃地址手动映射到链接器映射文件中的条目?

0 投票
1 回答
1395 浏览

java - 如何在 Java 代码中获取崩溃点

我的应用程序仅android-support-v4.jar/libs中。我不使用其他库。

我的应用程序因 SIGNAL 11 错误而崩溃。我想使用android-ndk 的addr2line实用程序。我们可以使用这个工具找到java文件的函数和行号吗?任何帮助在这里都会很有帮助

我的应用程序是writing蓝牙套接字,在两者之间我正在关闭socket我怀疑,错误即将到来,因为在套接字write()之后调用close()但我无法找到崩溃的确切行或函数我如何检查我做错了什么

Logcat 跟踪:

0 投票
2 回答
1225 浏览

assembly - addr2line 的反转

给定目标文件和地址 addr2line 工具可以将其与源代码中的文件和行号相关联。

我想要相反的。给定一个行号和一个目标文件,我想获得与源代码中给定行相对应的指令地址列表。

我知道我可以使用 objdump -DS 并寻找一行,但这很不方便,并且需要手动过滤掉地址。如果我给它一个行列表,你知道任何可以做我想做的工具吗?

UPD。

我举一个我想要的例子。

我有一组文件行:

我将此列表传递给一个工具:

它向我报告了这些行的指令地址:

0 投票
1 回答
1589 浏览

ubuntu - 如何为 addr2line 提供符号文件以在 Ubuntu 中与剥离的二进制文件一起使用?

我有一个在 Ubuntu 中运行的 C++ 应用程序。我想做的是剥离其符号的应用程序二进制文件,以便它们不是二进制文件的一部分,而是使用 addr2line 实用程序通过引用符号文件而不是作为二进制文件一部分的符号来获取回溯信息. 这可能吗?

到目前为止,我得到的最接近的是使用以下命令生成符号文件:

然后我尝试将该文件与 addr2line 实用程序一起使用,如下所示:

但这会产生抱怨:

所以我尝试了:

但这会产生抱怨:

有人可以引导我朝着正确的方向前进吗?我究竟做错了什么?

提前感谢您的帮助!

编辑:

我现在意识到,当我认为我正在创建一个仅包含符号信息的文件时,其中包含以下内容:

我实际上只是在创建一个名为 thesymbols.sym 的剥离二进制文件

话虽如此,我最初的问题仍然存在。有任何想法吗?

0 投票
1 回答
784 浏览

gcc - 海湾合作委员会。生成有限的调试信息

有没有办法强制gcc只生成足够addr2line实用的完整调试信息的子集?或者有什么方法可以去掉不需要的?我试过了

$ objcopy --only-keep-debug --remove-section=.debug_loc --remove-section=.debug_aranges --remove-section=.debug_frame my-elf-file

有什么可以除掉的吗?

0 投票
0 回答
606 浏览

c++ - 使用 objdump 检测源代码中的特定函数调用

我需要一种方法来检测调用特定函数的位置。例如:

关键是,我只需要函数调用,而不是定义或声明。而且我不仅需要它用于“简单”的类 C 标识符,甚至用于类方法、命名空间中定义的函数等,因为我将把这个程序主要用于 C++。


我的尝试

  1. GTags - 很好地检测标识符,但无法区分函数调用和定义等。

  2. CScope - 适用于 C,但有时会在 C++ 中失败

  3. objdump+ addr2line- 下面更详细地描述

我现在正在尝试以objdump这种addr2line方式使用:

输出如下所示:

然后我从第一列中取出数字并尝试在如下代码中获取物理位置:

有时它会正确地找到函数调用,有时它会找到完全不同的东西(我猜是某种参考等)。

所以,我的问题是——是否有可能检测出哪些发现是函数调用?我明白callq了,输出中有,但我不完全确定它只是代码中的函数调用。

0 投票
0 回答
537 浏览

linux - addr2line 为行号生成问号

最近在使用addr2line代码时,gRPC我看到它没有产生行号。手册页说明如果无法确定add2line行号将是。0

行号的原因可能是什么?

0 投票
1 回答
2244 浏览

linux - addr2line 如何定位源文件和代码行?

addr2line将地址转换为文件名和行号。我仍然是调试的初学者,并且对 addr2line 有一些疑问。

  1. 如果正在调试某个 .so(二进制)文件,该工具如何定位其源代码文件(从哪里可以得到它!),如果源不存在怎么办?

  2. 二进制中的地址与其源中的行号有什么关系,那么 addr2line 可以做这种映射吗?