Linux 使用LD_PROFILE分析预加载的共享库

Linux 使用LD_PROFILE分析预加载的共享库,linux,ld,sprof,Linux,Ld,Sprof,我目前正试图使用LD_profile环境变量分析预加载的共享库 在使用预加载的库运行应用程序(在我的例子中是ncat)之前,我使用“-g”标志编译库并导出LD_PROFILE_输出以及LD_PROFILE。因此,更确切地说,我所做的是: 使用“-g”标志编译共享库libexample.so export LD\u PROFILE\u OUTPUT=`pwd` export LD_PROFILE=libexample.so 运行LD\u PRELOAD=`pwd`/libexample.so nc

我目前正试图使用LD_profile环境变量分析预加载的共享库

在使用预加载的库运行应用程序(在我的例子中是ncat)之前,我使用“-g”标志编译库并导出LD_PROFILE_输出以及LD_PROFILE。因此,更确切地说,我所做的是:

  • 使用“-g”标志编译共享库libexample.so
  • export LD\u PROFILE\u OUTPUT=`pwd`
  • export LD_PROFILE=libexample.so
  • 运行
    LD\u PRELOAD=`pwd`/libexample.so ncat…
  • 预加载本身可以工作,并且使用了my library,但是没有创建libexample.so.profile文件。如果改用
    export LD_PROFILE=libc.so.6
    ,则会出现一个预期的libc.so.6.PROFILE文件

    这是组合LD_预加载和LD_配置文件的问题还是我可能做错了什么

    我在CentOS 6.4上使用的是glibc v2.12,如果有任何关联的话


    非常感谢

    对不起,我不知道为什么LD_PROFILE不能与LD_PRELOAD一起工作

    但是,对于使用-g编译的评测二进制文件,我非常喜欢valgrind工具和Graphical工具kcachegrind

    valgrind--tool=callgrind/path/to/some/binary带选项

    将创建一个名为callgrind.out.1234的文件,其中1234是程序运行时的pid。可以使用以下方法分析该文件:

    kcachegrind调用grind.out.1234

    在kcachegrind中,您将很容易看到大部分CPU时间花费在哪些函数中,被调用方映射也以nise图形方式显示了这一点。调用图可能有助于理解程序是如何工作的。您甚至可以查看源代码,查看每行上花费了多少CPU时间

    我希望你会发现valgrind很有用,即使这不是你的LD_档案问题的答案。valgrind的缺点是,当valgrind用于评测和内存检查时,它会减慢速度