Valgrind không sửa lỗi


18

Tôi đã cố gắng làm theo hướng dẫn trực tuyến cho Learn C The Hard Way .

Tuy nhiên, sau khi thiết lập valgrind (tôi đã theo các liên kết khác giúp thiết lập valgrind trên ubfox 12.04), khi tôi cố gắng gỡ lỗi thực thi c, tôi thấy các lỗi sau.

ayusman@ayusman-ubuntu:~/lcthw$ valgrind ./ex4
==1984== Memcheck, a memory error detector
==1984== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==1984== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==1984== Command: ./ex4
==1984== 

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-linux-x86-64.so.2
valgrind:  was not found whilst processing
valgrind:  symbols from the object with soname: ld-linux-x86-64.so.2
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.

ayusman@ayusman-ubuntu:~/lcthw$ 

Có điều gì tôi có thể làm để làm cho valgrind cuối cùng hoạt động không?

Tôi có Ubuntu 12.04 trên hộp ảo. Máy tính xách tay của tôi là một hệ điều hành Windows 7 64 bit.


valgrind hoạt động tốt với tôi, nhưng tôi không thể nói những thư viện nào tôi đã cài đặt. valgrind có sẵn từ repo. bạn không cần phải biên dịch giống như học C theo cách khó. cài đặt từ repo sẽ xử lý vấn đề phụ thuộc cho bạn
RobotHumans

Câu trả lời:


42

Tôi nhận được cùng một thông điệp (ngoại trừ ld-linux-x86-64.so.2được thay thế bởild-linux.so.2 ). Tôi đã cài đặt Valgrind bằng cách sử dụng apt-getlibc6-dbg đã được đưa vào như một phần phụ thuộc.

Tôi chưa giải quyết được vấn đề này, nhưng một manh mối là lỗi tương quan với việc tôi sử dụng -m32khi xây dựng.

Vì vậy, có vẻ như, trong trường hợp của tôi, vấn đề là thiếu phiên bản libc6-dbg 32 bit (hoặc một số thành phần của nó), khi xây dựng trên bản cài đặt Ubuntu 12.04 64 bit.


Giải pháp (cho trường hợp của tôi)

Đối với tôi, lệnh sau đây khiến mọi thứ hoạt động ...

sudo apt-get install libc6-dbg:i386

Điều này được thảo luận tại https://bugs.launchpad.net/ubfox/+source/eglibc/+orms/881236

Lưu ý: Gói libc6-dbg:i386không hiển thị dưới dạng tùy chọn khả dụng trong Synaptic hoặc thông qua hoàn thành lệnh apt-get- nhưng dù sao nó cũng ở đó.


Có một sự thay đổi tốt, bạn sẽ cần trợ giúp xây dựng trước: stackoverflow.com/a/7412698/86967
tộc

điều này nên được đánh dấu là chính xác; những :i386là chìa khóa ở đây.
Thomas Shields

Đó là 32-bit đã làm điều đó!
Cardin

1
Điều này đã giải quyết nó cho tôi .. Tôi đã thấy lỗi này trên một chiếc máy mơ hồ. Như các nhà bình luận khác đã nói, điều này nên được đánh dấu là chính xác. (libgc-dbg đã được cài đặt như một phụ thuộc valgrind, đó là i386 đã thực hiện thủ thuật này)
Ken

Câu trả lời này xử lý chính xác các nhị phân 32 bit. libc6-dbgđã được gợi ý trong valgrindthông báo lỗi của.
leesei

11

Ok, tôi đã làm như vậy libc6-dbg như vậy

sudo apt-get install libc6-dbg

và valgrind dường như hoạt động tốt.

Nhờ vào liên kết diễn đàn Ubuntu:

http://ubuntuforums.org/showthread.php?t=1017692


@ Goaler444 tôi mới làm. Cảm ơn vì đã nhắc nhở.
Ayusman

như các điểm câu trả lời khác, làm sudo apt-get install libc6-dbg:i386có thể là một giải pháp tùy thuộc vào nhị phân được valgrinded (64 bit vs 32 bit).
đăng xuất

0

Tôi đã vật lộn với điều này trong một thời gian rất dài, biên dịch ở chế độ -m32 hoạt động, nhưng đó là một nỗi đau ở mông, hơn nữa nếu tôi muốn sử dụng ví dụ -lcrypto, tôi không thể biên dịch trong -m32 vì tôi đã không cài đặt trong 32 bit .

Vì vậy, tôi đã đọc qua rất nhiều bài viết tương tự, thường khuyên nên cài đặt libc6-dbg: i386 ... Tôi nghĩ rằng điều này đã giải quyết vấn đề cho -m32, nhưng đó không phải là điều tôi đang tìm kiếm. Vì vậy, sau một thời gian dài đã đến đây: https://lists.ubfox.com/archives/foundations-bugs/2013-November/173202.html

Vì vậy, hãy thử chạy dpkg -l libc6 * và nếu bạn thấy libc6-amd64, điều này có thể giúp bạn. Nhưng đọc nó một cách cẩn thận. điểm 2, vì bạn sẽ không thể sử dụng bất kỳ lệnh nào sau khi bạn gỡ bỏ gói libc6-amd64, vì vậy hãy chuẩn bị một liveCD và làm theo hướng dẫn :) Nó giúp tôi giải quyết vấn đề, nhưng tôi mất khoảng 3 giờ và vài giây sợ hãi . Tôi khuyên bạn nên sao lưu dữ liệu của mình trước khi bạn làm điều đó, bởi vì nếu bạn thất bại, có lẽ sẽ không có cách nào quay lại.

Và hãy cẩn thận ở điểm 4! Bạn không thể đơn giản viết lệnh được đề xuất ở đó
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2 bởi vì nó sẽ tạo một liên kết tượng trưng trong /thư mục cd trực tiếp . Ngoài ra, bạn phải có quyền root để viết vào lib64. Vì vậy, làm thế nào tôi làm điều đó là: (tôi đã có / thư mục trên đĩa valgrind bị hỏng của tôi được mở thông qua thiết bị đầu cuối liveCD)

1)sudo rm ./lib64/ld-linux-x86-64.so.2 //removing old link

2)sudo ln -s /lib/x86_64-linux-gnu/ld-2.17.so ./lib64/ld-linux-x86-64.so.2

//you refer to the file on the disk with broken linux, but if you wrote just / instead of ./ you would create the link in the liveCD / folder

Hy vọng tôi không quên bất cứ điều gì và điều này sẽ hữu ích.

PS: Tôi tự hỏi liệu có thể thay đổi symlink trước khi bạn gỡ bỏ gói libc6-amd64 (bạn sẽ bỏ qua toàn bộ nội dung liveCD) nhưng tôi không chắc chắn.


Hãy xem ngôn ngữ của bạn !!!
Panther
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.