Valgrind未经认可的说明
Valgrind Unrecognised instruction
我有以下代码:
#include <iostream>
#include <random>
int main() {
std::mt19937_64 rng(std::random_device{}());
std::cout << std::uniform_int_distribution<>(0, 100)(rng) << 'n';
}
我试着用valgrind
来描述它,但它说:
vex amd64->IR: unhandled instruction bytes: 0xF 0xC7 0xF0 0x89 0x6 0xF 0x42 0xC1
vex amd64->IR: REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
vex amd64->IR: VEX=0 VEX.L=0 VEX.nVVVV=0x0 ESC=0F
vex amd64->IR: PFX.66=0 PFX.F2=0 PFX.F3=0
==2092== valgrind: Unrecognised instruction at address 0x4cdc1b5.
==2092== at 0x4CDC1B5:std::(anonymous namespace)::__x86_rdrand() (random.cc:69)
==2092== by 0x4CDC321: std::random_device::_M_getval() (random.cc:130)
==2092== by 0x4009D4: main (random.h:1619)
前面有多个实例:
--2092-- WARNING: Serious error when reading debug info
--2092-- When reading debug info from /lib/x86_64-linux-gnu/ld-2.22.so:
--2092-- Ignoring non-Dwarf2/3/4 block in .debug_info
我在Debian上使用x86-64平台上的标准包,使用valgrind3.11.0使用gcc 5.3.1进行编译。非法指令似乎在libstdc++6中。
如何让valgrind
评测我的代码?
事实上,Valgrind用中间语言(VEX)模拟您的程序,以了解它是否发现内存冲突。
该VEX语言捕获了i386、amd64、arm等几个汇编程序的所有指令。。。但是,它有时会错过一些指令(尤其是像rdrand
这样的专用指令,它链接到AES特定的指令集)。
这正是你的程序所发生的事情。Valgrind可能偶然发现了一条未知的指令,无法将其翻译成VEX中间语言。
但是,你并不是唯一一个排队等待修复的人:
- Launchpad上也有同样的问题
- KDE错误追踪器上也有同样的问题
- 。。。等等
这是一个已应用于Valgrind的补丁,可能为您解决问题(取决于您的CPU)。
但是,你唯一能做的就是安装一个新版本的Valgrind,并希望该指令在最新版本中得到支持。
我添加了-mno-avx
编译器选项来解决这个问题,这为我解决了问题,因为我的错误与valgrind无法翻译的AVX指令无关。
set (CMAKE_CXX_FLAGS "-mno-avx") # added to CMakeLists.txt
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- 当使用通配符和null指针调用函数时,对输出的说明
- 额外分配valgrind
- 关于C++中具有多重继承"this"指针的说明
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- 16 位到 10 位转换代码说明
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- 编译器指出结构和 int 说明的错误 2059
- Valgrind:可以处理更多可能丢失的字节吗?
- 如何在程序执行时查看Valgrind Massif输出(或其他堆分析器)?
- 随机数生成函数说明
- C++/Qt Valgrind 未初始化的字节
- 在 valgrind c++ 上读取大小 8 无效
- 赋值到类型和空大括号. 语法说明
- C++ switch 语句:对案例进行分组,并针对每个案例给出特定的说明
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 了解 Linux 虚拟内存:valgrind 的 massif 输出显示了有和没有 --pages-as-heap 的主要差异
- Valgrind 在 std::string::swap 中报告 SIGILL
- Valgrind未经认可的说明
- C++图形函数内存泄漏(valgrind在线上没有具体说明)