生信软件莫名报错,别方,改个名试试

admin 15 2025-01-31 编辑

这两天技术团队需要对TCGA中的样本提取SNP构建进化树,面对3万多的碱基,mega有点吃力,于是采用了其他的构树工具phyml,但是发现跑的时候莫名其妙的出错。小编看到之后,发现这个问题就是我之前遇到过的问题。样本名字太长,超出内存。不用质疑,生信的很多软件都有这个毛病。

看这篇16年的旧文,希望对大家有所帮助。

生信软件中莫名的错误:段错误

1、什么是段错误

程序运行在内存中;

系统在程序运行之前会在内存中先给程序画出一个空间

这个空间有些来存放代码的;有些来存放运行时的变量,还有些....

这个空间有一个区间使用来存放运行时的变量什么的

段错误 就是程序运行时,变量访问越界一类的问题...

可能出现的原因是:

数组下标越界

动态分配内存的指针被doublefree了(释放两次了)

2、生物信息中常见的段错误

目前针对c语言编写的生信软件,genblastA,codeml,genewise 等都会突然的爆出各种段错误。如果作者程序相对健壮,会告知你那一部分出现了异常。比如codeml,但是更多的情况下就是直接抛出segment default。

很多情况下不清楚为啥会报这个错误。

c语言中定义一个变量,比如说字符串,是要求指定字符串的大小的,比如如果一个字符串的上限为30个字符,那么如果你的文件名,文件路径,或者是基因的id,fa 的id 超过这个上限,就会报错。我们在实际的项目中,有的时间文件名字,或者路径都是很长,基因的id也会很长,这样在运行过程中就会报错。

常见的错误:

1、paml中配置文件的文件目录太深,会报错。找不到文件。

2、Genewise,genblastA中如果文件名,文件路径名,id名太长,会直接抛出段错误。

 

以genewise为例:

genewise  -splice model -init global -gene human.gf  -gff -sum -genes -cdna  pep.single.ENSGGOP00000001241.2_NW010795405.1-1637954-1727601_Fgene.single.ENSGGOP00000001241.2_NW010795405.1-1637954-1727601_F  >genewise.ll

 

genewise  -splice model -init global -gene human.gf  -gff -sum -genes -cdna   1.pep 1.gene >genewise.ss

这样就可以跑出来。

我们改一下里面pep的id长度

原来的pep的名字为:

改成

 genewise  -splice model -init global -gene human.gf  -gff -sum -genes -cdna   1.pep 1.gene >genewise.xx

 

3、如何解决

大家在以后的学习和工作中,如果需要对c语言编写的程序进行二次开发,包装,或者并行等操作的时候,建议对输入的文件进行处理,比如基因的id变短,然后处理完之后再变回来。还有就是尽量不使用绝对路径,使用相对路径。这样会使段错误的出现概率大大减少。

希望可以帮到你。

由于学力有限,书写定有错误,希望大家多多批评指正,共同学习。

更多生信分析需求,请加微信13621202201

生信软件莫名报错,别方,改个名试试

上一篇: 质粒构建工具推荐,实验室必备的分子克隆利器
下一篇: 比肩铜死亡的最新细胞死亡方式:双硫死亡
相关文章