BLASTN报错Error pre-fetching sequence data的含义及解决方法
解决BLASTN运行时的空指针异常问题
问题重现
执行以下BLASTN命令时触发空指针异常:
blastn -db ~/pseudomonas-db/pseudomonas -query ~/desktop/inputfiles/poz176.fasta -out poz176-out -num_threads 8
错误信息:
Error: NCBI C++ Exception: T0 "c++/include/corelib/ncbidiag.hpp", line 980: Critical: (CCoreException::eNullPtr) ncbi::CObject::ThrowNullPointerException() - Attempt to access NULL pointer. T0 "c++/include/corelib/ncbidiag.hpp", line 789: Critical: (CCoreException::eNullPtr) ncbi::BlastFormatter_PreFetchSequenceData() - Error pre-fetching sequence data Stack trace: /usr/lib/ncbi-blast+/libxncbi.so ???:0 ncbi::CObject::ThrowNullPointerException() offset=0xA6 addr=0x7fa1ea902f76 /usr/lib/ncbi-blast+/libxobjmgr.so ???:0 offset=0x209609 addr=0x7fa1eb653609 /usr/lib/ncbi-blast+/libxobjmgr.so ???:0 ncbi::objects::CBioseq_Handle::IsSetInst_Length() const offset=0x9 addr=0x7fa1eb653a09 /usr/lib/ncbi-blast+/libxobjmgr.so ???:0 ncbi::objects::CBioseq_Handle::GetBioseqLength() const offset=0xE addr=0x7fa1eb653dce /usr/lib/ncbi-blast+/libxblast.so ???:0 ncbi::blast::LoadSequencesToScope(std::vector<ncbi::objects::CSeq_id_Handle, std::allocator<ncbi::objects::CSeq_id_Handle> >&, std::vector<ncbi::CRange<unsigned int>, std::allocator<ncbi::CRange<unsigned int> > >&, ncbi::CRef<ncbi::objects::CScope, ncbi::CObjectCounterLocker>&) offset=0x329 addr=0x7fa1ebd90e79 blastn ???:0 ncbi::BlastFormatter_PreFetchSequenceData(ncbi::blast::CSearchResultSet const&, ncbi::CRef<ncbi::objects::CScope, ncbi::CObjectCounterLocker>, ncbi::blast::CFormattingArgs::EOutputFormat) offset=0x5FE addr=0x555af7fb31ee blastn ???:0 CBlastnApp::Run() offset=0xFDC addr=0x555af7fa99ac /usr/lib/ncbi-blast+/libxncbi.so ???:0 ncbi::CNcbiApplicationAPI::x_TryMain(ncbi::EAppDiagStream, char const*, int*, bool*) offset=0x193 addr=0x7fa1ea84edd3 /usr/lib/ncbi-blast+/libxncbi.so ???:0 ncbi::CNcbiApplicationAPI::AppMain(int, char const* const*, char const* const*, ncbi::EAppDiagStream, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) offset=0x61D addr=0x7fa1ea85032d blastn ???:0 main offset=0x6B addr=0x555af7fa7e5b /lib/x86_64-linux-gnu/libc.so.6 ???:0 __libc_start_main offset=0xEA addr=0x7fa1ea38ed0a blastn ???:0 _start offset=0x2A addr=0x555af7fa876a
错误分析
该异常是BLAST在结果格式化阶段预取序列数据时触发的空指针访问,与数据库完整性、查询文件格式、BLAST版本bug相关,并非单纯内存分配问题。
解决步骤
验证BLAST数据库完整性
执行以下命令检查数据库是否正常:blastdbcmd -db ~/pseudomonas-db/pseudomonas -info若输出异常或报错,需重新用
makeblastdb构建数据库,确保构建过程无中断、无错误。检查查询序列文件
确认poz176.fasta格式合法:- 用
grep -n ">" ~/desktop/inputfiles/poz176.fasta查看所有序列ID,确保每个序列都有对应的ID行 - 检查序列内容是否存在乱码、缺失或格式错误
- 用
调整输出格式规避格式化bug
尝试使用tabular格式输出(无需预取完整序列数据),修改命令为:blastn -db ~/pseudomonas-db/pseudomonas -query ~/desktop/inputfiles/poz176.fasta -out poz176-out -num_threads 8 -outfmt 6若该命令正常运行,说明是默认格式化逻辑的问题,后续可尝试升级BLAST或使用其他兼容格式。
升级或重装NCBI BLAST+
旧版本BLAST可能存在已知bug,卸载当前版本后安装最新稳定版:# Ubuntu/Debian系统示例 sudo apt remove ncbi-blast+ sudo apt update && sudo apt install ncbi-blast+临时调高文件描述符限制
部分系统的文件描述符上限过低可能导致数据库读取异常,临时调整后重试:ulimit -n 4096
内容的提问来源于stack exchange,提问作者blackthorne18
相关产品推荐
相关产品推荐

