首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非法指令调试

非法指令调试
EN

Stack Overflow用户
提问于 2014-03-17 12:24:39
回答 3查看 9.1K关注 0票数 4

我编写了一整套生物信息学分析。(https://github.com/iontorrent/TS)它有很多的依赖关系(像鲤鱼,布拉斯,拉帕克,地图集等等)。

在编译时,我没有错误。问题是,创建的一些可执行文件无法工作,并在没有任何其他信息的情况下抛出一个非法的Instruccion。我在CentOS 5.6上使用GCC 4.8.2。

我想知道如何调试这些可执行文件,这样我就可以检查系统中哪一个库或代码出错了。

代码语言:javascript
复制
./tvc
tvc 4.0-7 () - Torrent Variant Caller

Illegal instruction

我认为问题在于LAPACK/BLAS/CBLAS。我对如何从源代码构建LAPACK/BLAS和CBLAS感到非常困惑。(在Centos 5中,LAPACK/BLAS的rpm版本已经过时,这个软件套件需要LAPACK 3.2.1)。我知道如何编译LAPACK和BLAS,我不知道如何安装CBLAS。

谢谢。

编辑:

提供此分析套件的人员还提供了一个带有预装Ubuntu和所有软件的VM。

我看了一下他们的gcc版本和配置:

代码语言:javascript
复制
gcc -v Using built-in specs. Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5.1'
--with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)

我的GCC配置:

代码语言:javascript
复制
Configured with: ../configure --prefix=/share/apps/local/gcc/4.8.2 --with-mpfr=/share/apps/local/gcc/4.8.2 --with-gmp=/share/apps/local/gcc/4.8.2 --with-as=/share/apps/local/binutils/2.24/bin/as --enable-languages=c,c++,fortran
Thread model: posix
gcc version 4.8.2 (GCC) 
EN

回答 3

Stack Overflow用户

发布于 2014-05-24 23:53:59

有几种可能性,但要想解决这个问题,请在调试器中运行程序,如下所示

代码语言:javascript
复制
$ gdb ./tvc

从调试器运行程序。注意:(gdb)是提示符

代码语言:javascript
复制
(gdb) run

这应该会抛出非法指令;从这里开始运行。

代码语言:javascript
复制
(gdb) bt full

这会告诉你非法指令发生在哪里。

票数 3
EN

Stack Overflow用户

发布于 2014-03-17 12:48:17

可能是使用编译器设置编译它,以生成与CPU不兼容的代码。或者链接到为其他cpus优化的库。特别是数值库通常有特殊的构建来使用CPU的所有功能。例如,如果您使用构建的库来使用SSE4指令,但是您的CPU稍微老了一点,它可能会抛出此错误。

因此,请仔细阅读您的CPU可以使用哪一种库的lapack或blas。也许你必须为你的cpu重新编译它。

票数 1
EN

Stack Overflow用户

发布于 2014-03-17 12:30:31

“我想知道如何调试这些可执行文件,”

从在调试器中运行它开始。(这就是为什么它被称为调试器;它帮助您调试可执行文件)。

当程序使用“非法指令”失败时,调试器将能够向您显示失败的位置,并提供有关原因的更多信息。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22454200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档