前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决软件报错如何“对症下药”

解决软件报错如何“对症下药”

作者头像
生信喵实验柴
发布2022-01-05 09:43:43
1K0
发布2022-01-05 09:43:43
举报
文章被收录于专栏:生信喵实验柴

背景

在生物信息分析过程中常常会遇到各种错误,包括软件错误,文件错误,系统错误等,这些错误需要处理,否则分析无法进行,或者得到错误的信息。

一、认识软件错误

1.1 为什么会出错?

生物信息在 Linux 系统下采取命令行模式运行,命令行运行需要严格的执行标准,必须遵循严格的语法限制。相差一个字符都有可能无法运行,有些情况下多出一个空格可能就会有严重的影响,造成不可挽回的损失,例如下面这条命令:

代码语言:javascript
复制
删除所有以 fq.gz 结尾的文件
rm -rf *.fq.gz #正确语法
rm -rf * .fq.gz #错误语法,通配符后多了一个空格

上面的代码中,本来是要删除所有以 fq.gz 结尾的文件,由于都了一个空格,就会将全部文件删除,造成重大损失。因此,在 Linux 系统命令行下操作,必须遵循严格的语法。否则软件就会提示错误,一般会给出相应的错误,可根据相应错误提示信息进行排错。

1.2 提示警告与报错

软件运行过程中一般会给出屏幕输出信息,屏幕输出信息并不是都是错误信息。有的是输出结果,是我们需要的内容;有时候是软件运行的提示信息,例如软件每一步都做了哪些,这都是正常显示;还有一些是警告信息,让你注意,最后就是错误信息 Error,这就需要特别处理了。错误信息对导致软件中断。在一些命令行终端中,错误信息会有红色颜色显示。下面分别进行介绍。

1.2.1 返回空白

运行之后没有任何返回结果,比如一个运行结束,直接返回命令行。这是正常现象。命令行操作的逻辑都是正确执行不提示,有问题才提示。

1.2.2 提示信息

一些操作需要给出一些提示信息,例如 fastqc 软件,则会返回一些提示信息,例如显示有百分之几的数据处理完了。这样就把软件运行的过程给详细展示出来,如果在哪一步出现问题,就一目了然了。这些都是注释信息,属于正常提示信息。

代码语言:javascript
复制
nohup: ignoring input and appending output to `nohup.out'

忽略输入输出,将信息化信息记录到 nohup.out 文件中。

1.2.3 警告信息 Warnings

警告信息是一种比较令人迷惑的内容,但其实警告信息是非常重要的,很多人经常将警告信息和错误信息相混淆。警告信息并不影响软件运行,但是提示需要用户特别注意。比如加载 R 包的时候,提示当前的包是基于最新 R 版本构建的,用户使用的 R 版本与构建包的版本不一致,这个只是一个警告,并不影响包的使用,大部分情况下也不会影响结果。还有就是在做统计检验过程中,会提示你的数据模型太小,虽然也会返回结果,但可能存在

误差,需要用户注意。大家需要知道的就是警告信息并不影响软件执行,但是要特别注意。

1.2.4 错误信息 Error

最后一个比较重要的就是错误信息,错误信息也是经常会遇到的,错误信息直接给出 Error提示内容,终止掉软件的执行,必须处理,否则无法得到结果。不过很多软件的报错信息其实已经非常完善了,比如经常遇到的“command not found”,“No sucn file or dirctory",“ installation of package ‘Rcpp’ had non-zero exit status"等。遇到这种问题就需要根据经验分析错误,遇到多了才能知道该如何解决。或者直接将错误信息复制到搜索引擎里寻找解决方案。

1.3 错误提示关键字

错误提示会给出一些关键字,根据关键字进行判断。

语法问题:synatax

参数问题:argument

权限问题:permission

网络问题:connection

内存问题:dump

磁盘问题:disk

二、解决错误

在命令行模式下运行生物软件,主要考虑三个因素。软件,输入文件,选项参数。那么可能出错的地方也就在此,部分情况下也可能是硬件问题,比如资源不足。如果是像上面介绍过的错误,一般容易发现,比较好解决。但是软件、输入文件,选项参数都检查过了,还是提示错误,该如何解决呢?

2.1 学会分析问题

好的软件在内部都会有处理错误的机制,比如 perl 或者 python 的程序,一般会提示错误,面对错误,一定要做到,不要害怕。尝试阅读提示内容。如果发现里面有 Memory,那么就可能是和内存相关,是不是内存不够用了。如果是包含 Socket,那么可能是网络问题等;

2.2 Google 一下

你所遇到的问题,几乎别人都遇到过,所以,Google 一下,或者 bing 一下错误,看一下别人同样的问题是如何解决的,Google 几乎可以找到所有的报错内容。但是你最好要学会搜索,不要把好几页的错误内容都去 Google,要学会使用关键字,至于如何使用个关键字搜索,这个你自己 Google 一下吧。

2.3 控制单因素变量测试

如果以上方法都试了,还是找不到错误,就尝试控制单因素变量,进行测试。例如有这样的代码

代码语言:javascript
复制
barplot(x,xlab='', ylab="genexpression",names.arg=c("Control","Cold",
"Osmotic", "Salt", "Drought", "Genotoxic", "Oxidative", "UV-B",
"Wounding","Heat"),col =
c(brewer.pal(9,"Blues")[1],brewer.pal(9,"Blues")[2],brewer.pal(9,"Blues")[3],b
rewer.pal(9,"Blues")[4],brewer.pal(9,"Blues")[5],brewer.pal(9,"Blues")[6],brew
er.pal(9,"Blues")[7],brewer.pal(9,"Blues")[8],brewer.pal(9,"Blues")[9]),cex.ax
is=1.5,cex.names=1.5,legend.text= c("0 Hour", "After 0.25 Hour", "After 0.5
Hour", "After 1 Hour", "After 3 Hours", "After 4 Hours", "After 6 Hours",
"After 12 Hours", "After 24 Hours"
),args.legend =list(x = "right",cex=1),beside=TRUE)
abline(h=0)

上面是一条很长的绘图函数。一次运行会出错,那么怎么办呢。这个时候就一点点筛选,到底是哪个地方出现了问题。

首先

代码语言:javascript
复制
barplot(x)

如果没有问题,在一点点加选项,直到找到出错的地方为止,就是这样。而不是全部代码中去查找。

2.4 截取部分数据测试

如果感觉数据有问题,就换另外的小数据测试一下,或者截取部分进行测试。比如人基因组很大的数据,如果运行程序出错了,可以用 head 命令每个截取一部分进行测试。

三、常见错误

下面给出一些生物软件分析过程中常见问题。

3.1 command not found

这样的错误,原因就是软件没有安装,或者是软件路径没有写正确,还有一种可能是软件名写错了,或者没有区分大小写;

解决方案:

1、检测软件是否安装正确,有可执行程序,使用全路径试一下;

2、将软件可执行程序路径添加到.bashrc 文件中的 PATH 变量中

3.2 No such file or directory

如果敲软件名,软件可以运行,或者之前软件都可以运行,那么绝大部分就是输入文件的问题。输入文件经常出现“No such file or directory”,这就是因为输入文件路径写错了,在R 语言中“Error: object 'x' not found”的错误与之类似。那么检查一下这个对象是否存在,是否有值。

解决方案:

检查文件路径是否正确,文件是否存在;

3.3 文件格式

对于输入文件,另一个比较重要的错误就是文件格式。每一款软件都需要严格的输入文件格式,比如 fastq,fasta,sam,bam,vcf 等,不能随便输入。还有就是数量的问题,软件需要输入三个文件,你就不能输入两个,也不能输入四个。

3.4 软件选项参数

如果软件和输入文件都没有错误,那么就有可能是选项参数的问题。检查选项参数是否写正确,-i 是否写成-a 了,是否忘了加空格。一般这种情况下,软件不会运行,而是给出帮助信息。

3.5 Permission denied

这个是因为没有写的权限,就会提示,“Permission denied”,有些软件默认安装到系统目录,普通用户没有权限往这些路径写内容。

3.6 软件版本问题

系统中会存在多个软件版本,例如 python2 与 python3,要知道默认软件的版本,例如在命令行敲 python 或者 perl 的时候,要清楚使用具体软件的版本。一个好的方法是使用which 命令,可以查看软件的全路径。

3.7 网络问题

有些软件运行过程中需要联网,但出现错误代码 Http,403,404,connection 等关键字的时候,需要考虑网络连接问题。

3.8 文件问题

输入文件不存在,或者大小为空,文件不完整,或者输出文件已存在等。

not a regular file;

unexpected end of file;

File exists;

3.9 文件完整性校验

文件校验为了校验文件的完整性。有时候我们在下载文件的时候,一般比较大的文件,比如一个序列数据库,或者系统安装文件,文件都会附带一个 md5 文件,这个 md5 文件有什么作用的。

MD5 算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。也就是验证下载的文件是否完成。比如在服务器端文件生成了一个 md5 校验码。下载之后,如果文件完整被下载了,那么就能校验通过,文件不完整, 则校验不出来,这个校验码很短,所以使用起来非常方便。md5 校验在计算机世界有着广泛的应用。

md5 算法是对任意长度的信息逐位进行计算,产生一个二进制长度为 128 位的“指纹”,转换成 16 进制则是 32 位的进制值。不同的文件产生相同的 md5 值的可能性是非常非常小的。

在 linux 系统中,可以使用 md5sum 生成 md5 校验码和用于文件校验。系统自带 md5sum命令,使用起来也非常容易,敲 md5sum 接文件就会生成 32 为 16 进制的数字,我们将这些数字保存到一个文件中,以点 md5 结尾。将这个文件传到另一台计算机上,可以使用md5sum -c 来进行校验。

如果文件前后没有发生变化,则会输出 OK,表示校验成功,文件是完整的。

代码语言:javascript
复制
校验文件 gi_taxid_nucl.dmp.gz 完整性
ll gi_taxid_nucl.dmp.gz
md5sum -c gi_taxid_nucl.dmp.gz.md5

3.10 fatal error

Fatal error 意思为:致命的错误。

一般指内存读取出错因素为内存不够或故障另种是读取文件失败。文件是只读文件。第 2种是你的某些文件属性不该是只读,而设置成了只读。

四、缺少依赖配置

缺少依赖配置是生物信息分析中非常常见的一类问题,也是最难解决的问题。由于 Linux系统开源免费的特性,没有统一的集成开发环境,软件至今存在较强的依赖关系。往往安装一个软件,需要提前配置好一堆依赖环境。这类错误一般报错信息却提示缺少 xx 文件,一般各种库文件。下面给出几个案例,一般是将错误信息行信息复制到搜索引擎中搜索答案。

1、/usr/bin/ld: cannot find -lcrypto

代码语言:javascript
复制
yum install -y openssl-devel

2、libXss.so.1()

代码语言:javascript
复制
yum install libXScrnSaver.i686 libXScrnSaver.x86_64

3、configure: error: Could not find argtable2.h. Try $ ./configure CFLAGS='-Iyour-argtable2-include-path

代码语言:javascript
复制
yum install -y argtable.x86_64 argtable-devel.x86_64

4、cannot find -lstdc++

代码语言:javascript
复制
yum install -y libstdc++.i686 libstdc++.x86_64 libstdc++-devel.i686 libstdc++-devel.x86_64 libstdc++-static.i686 libstdc++-static.x86_64 compat-libstdc++-33.i686 compat-libstdc++-33.x86_64

5、Can't locate strict.pm:

代码语言:javascript
复制
Can't locate Text/Soundex.pm

6、 shared object ‘units.so’ not found

代码语言:javascript
复制
yum install udunits2-devel

7、/usr/bin/ld: cannot find -lltdl

代码语言:javascript
复制
yum install libtool-ltdl-devel
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信喵实验柴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档