关于使用 Julia 包装 C 代码的调试技巧
Debug tips about wrapping C code with Julia
C 结构:
typedef struct {
int32_t tid;
int32_t pos;
uint32_t bin:16, qual:8, l_qname:8;
uint32_t flag:16, n_cigar:16;
int32_t l_qseq;
int32_t mtid;
int32_t mpos;
int32_t isize;
} bam1_core_t;
typedef struct {
bam1_core_t core;
int l_data, m_data;
uint8_t *data;
uint64_t id;
} bam1_t;
我写的Julia数据类型:
type BinQualLqname
bin::UInt16
qual::UInt8
l_qname::UInt8
end
type FlagNCigar
flag::UInt16
n_cigar::UInt16
end
type Bam1_core_t
tid::Int32
pos::Int32
bin_qual_lqname::BinQualLqname
flag_ncigar::FlagNCigar
l_qseq::Int32
mtid::Int32
mpos::Int32
isize::Int32
end
type Bam1_t
core::Ptr{Bam1_core_t}
l_data::Int32
m_data::Int32
data::Ptr{Cuchar}
id::UInt64
end
当我在 julia 函数中使用上面的数据类型 Bam1_t
时:
function sam_read1!(samfile,bamheader,b::Ptr{Bam1_t})
record = ccall((:sam_read1,"libhts"),Cint, (Ptr{Void},Ptr{Void},Ptr{Bam1_t}),samfile,bamheader,b)
end
sam_read1!
修改的b中的数据是废话。我该如何调试呢?有什么推荐的工具或技巧吗?
sam_read1
int sam_read1(tamFile fp, bam_header_t *header, bam1_t *b);
哪里
typedef struct {
bam1_core_t core;
int l_aux, data_len, m_data;
uint8_t *data;
} bam1_t;
似乎与您的 Bam1_t 不同。会
type Bam1_t
core::Bam1_core_t
l_aux::Int32
data_len::Int32
m_data::Int32
data::Ptr{Cuchar}
end
工作?
C 结构:
typedef struct {
int32_t tid;
int32_t pos;
uint32_t bin:16, qual:8, l_qname:8;
uint32_t flag:16, n_cigar:16;
int32_t l_qseq;
int32_t mtid;
int32_t mpos;
int32_t isize;
} bam1_core_t;
typedef struct {
bam1_core_t core;
int l_data, m_data;
uint8_t *data;
uint64_t id;
} bam1_t;
我写的Julia数据类型:
type BinQualLqname
bin::UInt16
qual::UInt8
l_qname::UInt8
end
type FlagNCigar
flag::UInt16
n_cigar::UInt16
end
type Bam1_core_t
tid::Int32
pos::Int32
bin_qual_lqname::BinQualLqname
flag_ncigar::FlagNCigar
l_qseq::Int32
mtid::Int32
mpos::Int32
isize::Int32
end
type Bam1_t
core::Ptr{Bam1_core_t}
l_data::Int32
m_data::Int32
data::Ptr{Cuchar}
id::UInt64
end
当我在 julia 函数中使用上面的数据类型 Bam1_t
时:
function sam_read1!(samfile,bamheader,b::Ptr{Bam1_t})
record = ccall((:sam_read1,"libhts"),Cint, (Ptr{Void},Ptr{Void},Ptr{Bam1_t}),samfile,bamheader,b)
end
sam_read1!
修改的b中的数据是废话。我该如何调试呢?有什么推荐的工具或技巧吗?
sam_read1
int sam_read1(tamFile fp, bam_header_t *header, bam1_t *b);
哪里
typedef struct {
bam1_core_t core;
int l_aux, data_len, m_data;
uint8_t *data;
} bam1_t;
似乎与您的 Bam1_t 不同。会
type Bam1_t
core::Bam1_core_t
l_aux::Int32
data_len::Int32
m_data::Int32
data::Ptr{Cuchar}
end
工作?