关于使用 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

工作?