Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ltrace和strace工具中的行号信息_C_Strace_Ltrace_Re Engineering - Fatal编程技术网

ltrace和strace工具中的行号信息

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

我是否可以查看行号和文件名(对于使用ltrace/strace运行的程序)以及库调用/系统调用信息

例如:

ltrace或任何其他工具:
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)