标签: ltrace

gdb,valgrind,strace,ltrace和apport之间的区别

我正在寻找以下调试工具之间的区别.

那些是什么?

E:关于有人在这里偶然发现并且想知道"差异"的相同之处(从手册页缩写):

  • GDB

    允许您查看程序在运行/崩溃时"内部"发生的情况.

  • Valgrind

    一系列灵活的调试和分析工具.

  • Strace

    记录/拦截进程调用/接收的系统调用.

  • Ltrace

    记录/拦截进程调用/接收的信号/动态库/系统调用.

  • Apport

    拦截崩溃/未处理的异常,收集操作系统信息,提供有用的UI,并能够提交非崩溃错误.

debugging gdb valgrind strace ltrace

27
推荐指数
0
解决办法
8526
查看次数

ltrace 的替代方案,它适用于与“-z now”链接的二进制文件?

ltrace不适用于与-z nowoption链接的二进制文件,这是我的 Ubuntu 19.10 系统上的默认设置。它仅适用于与-z lazy.

有没有其他替代方法可以ltrace完成相同的工作,但也适用于now二进制文件?

c linux ltrace

8
推荐指数
1
解决办法
611
查看次数

ltrace和strace工具中的行号信息

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

例如:

code section :: ptr = malloc(sizeof(int)*5); (file:code.c, line:21)
Run Code Online (Sandbox Code Playgroud)

ltrace或任何其他工具: malloc(20) :: code.c::21

我已经尝试了ltrace/strace的所有选项,但无法找到获取此信息的方法.

如果不能通过ltrace/strace实现,我们是否有GNU/Linux的任何并行工具选项?

c re-engineering strace ltrace

6
推荐指数
1
解决办法
3219
查看次数

ltrace:在"library.so"中找不到.dynsym或.dynstr

我试过使用ltrace.我试图使用下面的命令来分析其用于通过程序的library.so文件sampleapp,ltrace -c -T --library=library.so --output=out.txt ./SampleApp.但它显示了上述错误.但是library.so是一个调试版本.所以符号表应该在那里.我试过验证它objdump --source library.so | grep CreateSocket().它返回使用该CreateSocket()函数的代码.这意味着它包含一个符号表.那个错误发生的原因呢?

相关文章:测量动态链接库的每秒CPU使用率

c++ profiler centos5 redhat ltrace

6
推荐指数
1
解决办法
2989
查看次数

如何使用 ltrace 跟踪动态加载的库调用

我有一个使用动态加载库来加载插件的 C 程序。我想跟踪库调用以调试插件的加载。

我看了看ltrace,但我似乎无法让它工作:

这是一个示例程序:

#include <stdio.h>
#include <stdlib.h>

#include <dlfcn.h>

int main() {
    int *a = malloc(sizeof(int));
    void *handle;
    double (*cosine)(double);
    char *error;

    handle = dlopen ("/usr/lib/x86_64-linux-gnu/libm.so.6", RTLD_LAZY);
    if (!handle) {
        fputs (dlerror(), stderr);
        exit(1);
    }

    cosine = dlsym(handle, "cos");
    if ((error = dlerror()) != NULL)  {
        fputs(error, stderr);
        exit(1);
    }

    printf ("%f\n", (*cosine)(2.0));
    dlclose(handle);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译(并删除PIE,否则 ltrace 将看不到任何内容): gcc main.c -pg -ldl -no-pie

跑步:ltrace ./a.out

输出

__monstartup(0x401170, 0x401431, 0x7fffe3875838, 0x7fffe3875838)                                                               = …
Run Code Online (Sandbox Code Playgroud)

c trace dlopen dynamic-library ltrace

6
推荐指数
2
解决办法
3508
查看次数

用5个参数调用的mprotect函数

根据mprotectLinux手册页,该函数有3个参数:

int mprotect(const void *addr, size_t len, int prot);
Run Code Online (Sandbox Code Playgroud)

但是在我正在分析的程序上运行ltrace时,我看到mprotect被调用如下:

mprotect(0x8049000, 4096, 3, 1, 0xb7e057ac)      = 0
Run Code Online (Sandbox Code Playgroud)

什么是第四和第五个参数?

编辑:使用ltrace版本0.5.和内核2.6.24-24-通用

谢谢

c security mprotect re-engineering ltrace

5
推荐指数
1
解决办法
501
查看次数

我应该监控哪些进程间锁定调用?

我正在使用strace/ 监视进程,ltrace希望找到并拦截一个检查并可能激活某种全局共享锁的调用.

虽然我以前曾经在Linux上处理过几种形式的进程间锁定,但我还是要查找要查找的内容.

目前我唯一的嫌疑是futex()在流程执行过程中很早就出现了.

Update0

关于我追求的是什么有一些混乱.我正在监视现有进程以调用持久进程间内存或等效内存.我想知道要查找的系统和库调用.我无意自称这些,所以很自然地futex()会出现,我相信很多图书馆都会根据这个来实现他们的锁定调用等.

UPDATE1

我想要一个函数名列表或文档链接,我应该在ltracestrace级别监视(并指定哪个).关于如何跟踪和定位全局锁定的任何其他好建议都会很棒.

linux locking interprocess strace ltrace

5
推荐指数
1
解决办法
1280
查看次数

iPhone:strace,dtruss,dtrace或同等产品?

有谁知道是否有类似stracedtrussdtrace为iPhone?

tester-iPhone:/tmp root$ apt-cache search dtruss
tester-iPhone:/tmp root$ apt-cache search dtrace
tester-iPhone:/tmp root$ apt-cache search trace
tester-iPhone:/tmp root$ apt-get install strace
Run Code Online (Sandbox Code Playgroud)
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Couldn't find package strace
Run Code Online (Sandbox Code Playgroud)
tester-iPhone:/tmp root$ apt-get install dtrace
Run Code Online (Sandbox Code Playgroud)
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Couldn't find package dtrace
Run Code Online (Sandbox Code Playgroud)
tester-iPhone:/tmp root$ apt-get install ltrace
Run Code Online (Sandbox Code Playgroud)
Reading package lists... Done
Building dependency tree
Reading state information... Done …
Run Code Online (Sandbox Code Playgroud)

iphone dtrace jailbreak strace ltrace

5
推荐指数
1
解决办法
2720
查看次数

ltrace 不适用于某些二进制文件

根据手册页,ltrace 应该拦截并记录任何已执行进程的动态库调用,但它似乎无法在某些二进制文件上正常工作。

这是在尝试跟踪 strcpy 时重现问题的方法。

我第一次看到 ltrace 能够处理一些二进制文件(wget here):

# ltrace -e strcpy wget --help >/dev/null
strcpy(0x63cc23, "auth-no-challenge")            = 0x63cc23
strcpy(0x63cc38, "background")                   = 0x63cc38
[...]
strcpy(0x63cf26, "verbose")                      = 0x63cf26
strcpy(0x63cf31, "verbose")                      = 0x63cf31
+++ exited (status 0) +++
Run Code Online (Sandbox Code Playgroud)

现在相同的代码在 httpd 上不起作用:

# ltrace -e strcpy /usr/sbin/httpd -t >/dev/null
Syntax OK
+++ exited (status 0) +++
Run Code Online (Sandbox Code Playgroud)

虽然我们可以确认使用 gdb 调用了 strcpy ,但没有跟踪库调用:

# gdb --quiet --args /usr/sbin/httpd -t 
Reading symbols from /usr/sbin/httpd...(no debugging symbols found)...done.
(gdb) b strcpy
Breakpoint 1 at 0x15d08 …
Run Code Online (Sandbox Code Playgroud)

linux debugging ltrace

5
推荐指数
1
解决办法
2481
查看次数

运行ltrace时没有输出

正如标题所说,ltrace在我的系统上无法正常工作.在大多数情况下,它没有输出,例如

$ltrace ls
[usual ls output]
+++ exited (status 0) +++

$gcc hello.c
$ltrace ./a.out
Hello world!
+++ exited (status 0) +++
Run Code Online (Sandbox Code Playgroud)

我正在使用最新的ltrace版本(来自包0.7.3-5.1ubuntu4),我甚至尝试从源代码重新编译,没有任何区别.我正在使用Ubuntu 16.10,内核4.8.0-42-generic.gcc版本是6.2.0.

奇怪的是,从Internet下载的二进制文件似乎工作正常,正确显示库调用.

我错过了什么?有人能够重现这个问题吗?

linux ubuntu shared-libraries ltrace

5
推荐指数
3
解决办法
1542
查看次数