ltrace 和 strace 工具中的行号信息
我是否可以查看行号和文件名(对于使用 ltrace/strace 运行的程序)以及库调用/系统调用信息。
例如:
code section :: ptr = malloc(sizeof(int)*5); (file:code.c, line:21)
ltrace 或任何其他工具: malloc(20) :: code.c::21
我已经尝试了 ltrace/strace 的所有选项,但无法找到获取此信息的方法。
如果无法通过 ltrace/strace 实现,我们是否有适用于 GNU/Linux 的并行工具选项?
Is it possible that I can view the line number and file name (for my program running with ltrace/strace) along with the library call/system call information.
Eg:
code section :: ptr = malloc(sizeof(int)*5); (file:code.c, line:21)
ltrace or any other tool: malloc(20) :: code.c::21
I have tried all the options of ltrace/strace but cannot figure out a way to get this info.
If not possible through ltrace/strace, do we have any parallel tool option for GNU/Linux?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以在
strace
和ltrace
中组合使用-i
选项(在调用时输出指令指针)使用addr2line
来解析对代码行的调用。You may be able to use the
-i
option (to output the instruction pointer at the time of the call) instrace
andltrace
, combined withaddr2line
to resolve the calls to lines of code.不,这是不可能的。为什么不使用 gdb 来实现这个目的呢?
当您使用 gcc 编译应用程序时,请使用 -ggdb 标志将调试器信息获取到您的程序中,然后使用 gdb 或等效前端(ddd 或类似)运行您的程序。
这里是快速 gdb 手册,可以帮助您一些。
http://www.cs.cmu.edu/~gilpin/tutorial/
No It's not possible. Why don't you use gdb for this purpose?
When you are compiling application with gcc use -ggdb flags to get debugger info into your program and then run your program with gdb or equivalent frontend (ddd or similar)
Here is quick gdb manual to help you out a bit.
http://www.cs.cmu.edu/~gilpin/tutorial/
您可以使用 strace-plus 来收集与每个系统调用相关的堆栈跟踪。
http://code.google.com/p/strace-plus/
You can use strace-plus that can collects stack traces associated with each system call.
http://code.google.com/p/strace-plus/
很老的问题,但我找到了一种方法来实现OP想要的:
首先使用带有
-k
选项的 strace,这将生成如下所示的堆栈跟踪:每个函数调用的地址都显示在每行的末尾,您可以将其粘贴到
addr2line< /code> 检索文件和行。例如,我们想要在 main() 中找到调用(堆栈跟踪的第五行)。
它将显示如下内容:
Pretty old question, but I found a way to accomplish what OP wanted:
First use strace with
-k
option, which will generate a stack trace like this:The address of each function call are displayed at the end of each line, and you can paste it to
addr2line
to retrieve the file and line. For example, we want to locate the call inmain()
(fifth line of the stack trace).It will show something like this: