c++ - 如何检查正在运行的进程以查看它正在使用哪些共享库?

标签 c++ linux runtime dlopen ldd

在 Linux 上,我有一个使用 dlopen() 加载一些共享库的 C++ 应用程序,但我怀疑正在加载的共享库版本不是我期望的版本,因为我的调试跟踪代码没有似乎被处决了。

有没有办法检查正在运行的进程以查询它当前打开的所有共享库以及每个库的路径?换句话说,类似于 ldd 但它适用于正在运行的可执行文件并列出运行时加载的库。

最佳答案

如果你想知道一个程序打开了哪些库文件,你可以试试pmap。 比如我们想知道bash进程3860打开了哪些库,结果可能是:

3860:   bash
08048000    880K r-x--  /bin/bash
08124000      4K r----  /bin/bash
08125000     20K rw---  /bin/bash
0812a000     20K rw---    [ anon ]
099ae000    348K rw---    [ anon ]
b715c000     44K r-x--  /lib/i386-linux-gnu/libnss_files-2.15.so
b7167000      4K r----  /lib/i386-linux-gnu/libnss_files-2.15.so
b7168000      4K rw---  /lib/i386-linux-gnu/libnss_files-2.15.so
b7169000     88K r-x--  /lib/i386-linux-gnu/libnsl-2.15.so
b717f000      4K r----  /lib/i386-linux-gnu/libnsl-2.15.so
b7180000      4K rw---  /lib/i386-linux-gnu/libnsl-2.15.so
b7181000      8K rw---    [ anon ]
b7183000     28K r-x--  /lib/i386-linux-gnu/libnss_compat-2.15.so
b718a000      4K r----  /lib/i386-linux-gnu/libnss_compat-2.15.so
b718b000      4K rw---  /lib/i386-linux-gnu/libnss_compat-2.15.so
b71a1000      4K r----  /usr/lib/locale/locale-archive
b71a2000   1428K r----  /usr/lib/locale/locale-archive
b7307000   2048K r----  /usr/lib/locale/locale-archive
b7507000      4K rw---    [ anon ]
b7508000   1676K r-x--  /lib/i386-linux-gnu/libc-2.15.so
b76ab000      8K r----  /lib/i386-linux-gnu/libc-2.15.so
b76ad000      4K rw---  /lib/i386-linux-gnu/libc-2.15.so
b76ae000     16K rw---    [ anon ]
b76b2000     12K r-x--  /lib/i386-linux-gnu/libdl-2.15.so
b76b5000      4K r----  /lib/i386-linux-gnu/libdl-2.15.so
b76b6000      4K rw---  /lib/i386-linux-gnu/libdl-2.15.so
b76b7000    112K r-x--  /lib/i386-linux-gnu/libtinfo.so.5.9
b76d3000      8K r----  /lib/i386-linux-gnu/libtinfo.so.5.9
b76d5000      4K rw---  /lib/i386-linux-gnu/libtinfo.so.5.9
b76d8000     28K r--s-  /usr/lib/i386-linux-gnu/gconv/gconv-modules.cache
b76df000     40K r-x--  /lib/i386-linux-gnu/libnss_nis-2.15.so
b76e9000      4K r----  /lib/i386-linux-gnu/libnss_nis-2.15.so
b76ea000      4K rw---  /lib/i386-linux-gnu/libnss_nis-2.15.so
b76eb000      8K rw---    [ anon ]
b76ed000      4K r-x--    [ anon ]
b76ee000    128K r-x--  /lib/i386-linux-gnu/ld-2.15.so
b770e000      4K r----  /lib/i386-linux-gnu/ld-2.15.so
b770f000      4K rw---  /lib/i386-linux-gnu/ld-2.15.so
bfbbf000    132K rw---    [ stack ]
 total     7152K

希望对您有所帮助。

关于c++ - 如何检查正在运行的进程以查看它正在使用哪些共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16466489/

相关文章:

c++ - 什么时候应该将对象置于 "resting"物理状态?

c++ - 禁用 gcc 错误参数 '<anonymous>' 包含指向未知边界数组的指针

c - 共享内存未同步更新

linux - Bash 脚本 'if' 调用带有参数的函数的语句

java - 这是打印二维数组最快的方法吗?

c++ - 点云库 : How visualize a set of 3D point stored in a C++ <vector>?

getch() 和 clrscr() 的 c++ 替代方案

linux - 在调用 syncfs() 之前我需要关闭文件吗

perl - 使用 Try::Tiny 和 Module::Runtime 避免在 Perl 中使用 try-catch 时出现警告

java - 从java发送命令到linux