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

admin 60 2025-02-13 09:58:08 编辑

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变短,然后处理完之后再变回来。还有就是尽量不使用绝对路径,使用相对路径。这样会使段错误的出现概率大大减少。

希望可以帮到你。

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

欢迎关注订阅号

如果你有数据分析的需求欢迎扫码关注微信小店

 

上一篇: 质粒构建工具推荐,实验室必备的分子克隆利器
下一篇: EXCEL合并,难不住我
相关文章