Tôi đã cố gắng gỡ lỗi lỗi phân đoạn gần đây bằng cách sử dụng valgrind trên mâm xôi Pi (mô hình b), chạy Debian GNU/Linux7.0 (wheezy). Mỗi lần tôi chạy valgrind trên một chương trình biên dịch C++, tôi nhận được một cái gì đó như sau:valgrind trả về hướng dẫn không được xử lý trên Raspberry Pi
disInstr(arm): unhandled instruction: 0xF1010200
cond=15(0xF) 27:20=16(0x10) 4:4=0 3:0=0(0x0)
valgrind: Unrecognized instruction at address 0x4843638.
at 0x4843638: ??? (in /usr/lib/arm-linux-gnueabihf/libconfi_rpi.so)
Sau đó, những thứ valgrind bình thường, gây ra một SIGILL và chấm dứt chương trình của tôi. Lúc đầu, tôi giả định có một số rò rỉ bộ nhớ trong chương trình của tôi đã khiến nó thực thi một phần bộ nhớ không chỉ dẫn như một lệnh, nhưng sau đó tôi chạy mã hello world sau đây, và nhận được kết quả tương tự.
#include <iostream>
using namespace std;
int main() {
cout<<"Hello World"<<endl;
return 0;
}
Có thể không có khả năng rò rỉ bộ nhớ/segfault trong đó, vậy tại sao nó cho tôi lỗi này? Tôi khá mới với valgrind, nhưng tôi chạy nó với cơ bản nhất valgrind ./a.out
.
thử cách này: 'valgrind --tool = memcheck --leak-check = yes --show-reachable = yes --num-callers = 20 --track-fds = yes./A' và đăng những gì xảy ra. –
tại sao bạn không sử dụng gdb debugger gdb? Nó rất dễ dàng để biết nguyên nhân của một segfault với nó! – Phong
@Phong: Nó không phải là segfault. Valgrind không chắc chắn cách xử lý lệnh. – Cornstalks