2013-05-09 8 views
5

Unter Linux habe ich eine C++ - Anwendung, die dlopen() verwendet, um einige gemeinsam genutzte Bibliotheken zu laden, aber ich bin verdächtig, dass die Version der gemeinsam genutzten Bibliothek nicht die erwartete ist, weil mein Debugging-Code nicht angezeigt wird ermordet werden.Wie kann ich einen laufenden Prozess überprüfen, um zu sehen, welche Shared Libraries verwendet werden?

Gibt es eine Möglichkeit, einen laufenden Prozess zu überprüfen, um alle freigegebenen Bibliotheken abzufragen, die er gerade geöffnet hat, und den Pfad zu jeder dieser Bibliotheken? Mit anderen Worten, etwas Ähnliches wie ldd, aber das funktioniert auf einer laufenden ausführbaren Datei und listet auch Laufzeit geladene Bibliotheken auf.

+1

versuchen 'lsof -p _process_id_' – stardust

+3

K hier ist eine vollständige Antwort. http://StackOverflow.com/Questions/5103443/how-to-check-what-shared-library-is-loaded-at-run-time – stardust

Antwort

7

Wenn Sie wissen möchten, dass die Bibliotheksdateien ein Programm geöffnet haben, können Sie pmap versuchen. Zum Beispiel, wenn wir die Bibliotheken wissen wollen, die 3860 bash Prozess geöffnet hat, könnte das Ergebnis sein:

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 

Wunsch es von Hilfe sein würde.

+0

Musste ein Programm durch GDB laufen, um es lange genug am Leben zu erhalten, aber pmap macht den Job. Vielen Dank! – dhardy

Verwandte Themen