Valgrind kann keine Debug-Symbole finden, selbst mit --extra-debuginfo-path

3460
Fraxtil

Ich versuche, Valgrind auf einem eingebetteten Debian-basierten PowerPC-System zu installieren. Ich habe es erfolgreich kompilieren können, aber jetzt beschwert sich, dass es keine Debug-Informationen finden kann. Ich habe nicht entfernte Kopien der relevanten gemeinsam genutzten Objekte im Dateisystem abgelegt und Valgrind über dieses Verzeichnis informiert, aber es funktioniert immer noch nicht.

Aufruf:

root@192.168.0.200:/# /root/valgrind/bin/valgrind --extra-debuginfo-path=/root/valgrind/usr/lib/debug /path/to/my_program -log ==6000== Memcheck, a memory error detector ==6000== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==6000== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for copyright info ==6000== Command: /path/to/my_program -log ==6000==  valgrind: Fatal error at startup: a function redirection valgrind: which is mandatory for this platform-tool combination valgrind: cannot be set up. Details of the redirection are: valgrind: valgrind: A must-be-redirected function valgrind: whose name matches the pattern: strlen valgrind: in an object with soname matching: ld.so.1 valgrind: was not found whilst processing valgrind: symbols from the object with soname: ld.so.1 valgrind: valgrind: Possible fixes: (1, short term): install glibc's debuginfo valgrind: package on this machine. (2, longer term): ask the packagers valgrind: for your Linux distribution to please in future ship a non- valgrind: stripped ld.so (or whatever the dynamic linker .so is called) valgrind: that exports the above-named function using the standard valgrind: calling conventions for this platform. The package you need valgrind: to install for fix (1) is called valgrind: valgrind: On Debian, Ubuntu: libc6-dbg valgrind: On SuSE, openSuSE, Fedora, RHEL: glibc-debuginfo valgrind: valgrind: Cannot continue -- exiting now. Sorry. 

Die fehlerhafte Datei ld.so.1befindet sich in /lib, und meine nicht entfernten Kopien befinden sich in einem separaten Verzeichnis:

root@192.168.0.200:/# find / -name ld.so.1 /lib/ld.so.1 /root/valgrind/usr/lib/debug/ld.so.1 /root/valgrind/usr/lib/debug/lib/ld.so.1 

Meine nicht gestrippten Kopien libc6-dbg_2.7-10ubuntu3_powerpc.debscheinen kompatibel zu sein:

root@192.168.0.200:/# file /lib/ld.so.1 /root/valgrind/usr/lib/debug/ld.so.1 /root/valgrind/usr/lib/debug/lib/ld.so.1 /lib/ld.so.1: symbolic link to `ld-2.7.so' /root/valgrind/usr/lib/debug/ld.so.1: symbolic link to `ld-2.7.so' /root/valgrind/usr/lib/debug/lib/ld.so.1: symbolic link to `ld-2.7.so' root@192.168.0.200:/# file /lib/ld-2.7.so /root/valgrind/usr/lib/debug/ld-2.7.so /root/valgrind/usr/lib/debug/lib/ld-2.7.so /lib/ld-2.7.so: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, with unknown capability 0x41000000 = 0x11676e75, with unknown capability 0x10000 = 0x90401, stripped /root/valgrind/usr/lib/debug/ld-2.7.so: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, not stripped /root/valgrind/usr/lib/debug/lib/ld-2.7.so: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (SYSV), statically linked, not stripped 

Und wenn ich die Funktionsweise verstehe objdump, scheint die von Valgrind erwähnte "umgeleitete Funktion" tatsächlich einen Eintrag in der Debug-Kopie zu haben:

root@192.168.0.200:/# objdump -x /lib/ld-2.7.so | grep strlen root@192.168.0.200:/# objdump -x /root/valgrind/usr/lib/debug/lib/ld-2.7.so | grep strlen 0002f734 l O .data.rel.ro 00000004 max_capstrlen 00018ff0 l F .text 000000b8 strlen 

Und doch hat das --extra-debuginfo-pathArgument keine Wirkung. Im Handbuch wird kurz auf diesen Schalter hingewiesen, aber dies sind praktisch alle Informationen, die ich dazu gefunden habe. Fehlt mir noch etwas?

Für die Aufzeichnung kann diese Maschine nicht mit dem Internet verbinden, so lassen apt/ dpkgkümmern Dinge ist leider nicht in Frage. /libund die meisten anderen Systemverzeichnisse sind auch schreibgeschützt (Mounted). Daher kann ich nicht einfach einen nicht entfernten Ersatz hinzufügen ld-2.7.so(nicht, dass ich ein solches Risiko eingehen würde).

6

1 Antwort auf die Frage

0
Ferenc

Ich hatte ein ähnliches Problem und das Hinzufügen von --allow-mismatched-debuginfo=yesParametern zu valgrind löste das Problem.

Interessant ... Pierre.Vriens vor 7 Jahren 0
Das hat bei mir nicht funktioniert. Ich bekomme immer noch "???" anstelle von tatsächlichen Debug-Symbolen. Geremia vor 6 Jahren 0