【发布时间】:2013-06-30 02:58:56
【问题描述】:
我最近一直在尝试在运行 Debian GNU/Linux7.0 (wheezy) 的树莓派(模型 b)上使用 valgrind 来调试分段错误。每次我在已编译的 C++ 程序上运行 valgrind 时,都会得到如下信息:
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)
然后是正常的 valgrind 东西,导致 SIGILL 并终止我的程序。起初我认为我的程序中存在一些内存泄漏,导致它执行一段非指令内存作为指令,但后来我运行了以下 hello world 代码,得到了相同的结果。
#include <iostream>
using namespace std;
int main() {
cout<<"Hello World"<<endl;
return 0;
}
其中不可能存在内存泄漏/段错误,那么为什么会给我这个错误?
我对 valgrind 很陌生,但我用最基本的 valgrind ./a.out 运行它。
【问题讨论】:
-
试试这个:
valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes ./a并发布发生了什么。 -
为什么不使用 gcc 调试器 gdb ?用它很容易知道段错误的原因!
-
@Phong:这不是段错误。 Valgrind 不确定如何处理指令。
-
@cornstalks:我知道问题出在 valgrind 上。但他说他首先尝试调试一个段错误。
标签: c++ valgrind raspberry-pi