ltrace和strace工具中的行号信息
我是否可以查看行号和文件名(对于使用ltrace/strace运行的程序)以及库调用/系统调用信息 例如: ltrace或任何其他工具:ltrace和strace工具中的行号信息,c,strace,ltrace,re-engineering,C,Strace,Ltrace,Re Engineering,我是否可以查看行号和文件名(对于使用ltrace/strace运行的程序)以及库调用/系统调用信息 例如: ltrace或任何其他工具:malloc(20)::code.c::21 我尝试了ltrace/strace的所有选项,但无法找到获取此信息的方法 如果无法通过ltrace/strace实现,那么我们是否有任何用于GNU/Linux的并行工具选项?不,这是不可能的。为什么不使用gdb来实现这个目的呢 当您使用gcc编译应用程序时,请使用-ggdb标志将调试器信息获取到您的程序中,然后使用g
malloc(20)::code.c::21
我尝试了ltrace/strace的所有选项,但无法找到获取此信息的方法
如果无法通过ltrace/strace实现,那么我们是否有任何用于GNU/Linux的并行工具选项?不,这是不可能的。为什么不使用gdb来实现这个目的呢 当您使用gcc编译应用程序时,请使用-ggdb标志将调试器信息获取到您的程序中,然后使用gdb或等效前端(ddd或类似)运行您的程序 这里是快速gdb手册来帮助你一点。
您可以使用
strace
和ltrace
中的-i
选项(在调用时输出指令指针),结合addr2line
来解析对代码行的调用。您可以使用strace plus来收集与每个系统调用相关的堆栈跟踪。
谢谢,我总是在运行程序时使用gdb。但问题有些不同:假设我有一个很大的代码库,并且我收到内存泄漏。如果我能算出行号,我就能更容易地捕捉到有问题的代码。Purify提供了这一信息,但我发现它在追踪问题的确切点方面有些不太有效。由于指令指针将位于libc内部,这如何帮助
strace
?您需要两个级别的回溯才能使其有用…@R..:因此,我最初考虑添加一个警告:来自库的调用,它也同样适用于ltrace
,但找不到适当的措辞。这是ltrace/strace最接近的一个。是的,对于ltrace来说,它工作得很好。对于strace,它无法找到地址。我们有没有办法将strace o/p映射到代码中?@sandepsing:问题是,除非您的代码自己进行系统调用(或者您的libc内联到您的代码中),否则地址将对应于C库的某些部分,而不是您的代码。您可能需要使用ltrace-S
选项来显示系统调用和库调用。雪,我被困得很厉害。假设我的代码包含一个包装函数:mymalloc()for malloc。现在,addr2line将只将malloc映射到mymalloc,而不映射到调用它的代码部分。
code section :: ptr = malloc(sizeof(int)*5); (file:code.c, line:21)