0

为了生成一些很棒的 C 程序变种,我从GitHub克隆了 Milu ,成功编译并运行了它的示例,就像Compilation in UbuntuExample说的一样。但是,当我想生成我的 c 文件的突变体时,我使用gcc -E并运行 Milu 处理 c 文件,然后core dump

gcc -E myfile.c > myfile
$MILU_PATH/bin/milu -v --exec-strategy=mut-1st myfile

因为这个故障很容易触发,而且c文件需要.h,所以这里就不放代码了,大家可以用其他的.c文件来触发。

然后我用它gdb来显示故障的细节。

gdb -c core $MILU_PATH/bin/milu
where

表明

(gdb) where
#0  0x0804ec5f in print_source_unexposed_expr ()
#1  0x0804f08c in print_source_expr ()
#2  0x0804f2da in print_source_binary_operator ()
#3  0x0804f039 in print_source_expr ()
#4  0x0804e41a in print_source_call_expr ()
#5  0x0804f148 in print_source_expr ()
#6  0x080500dc in print_source_cstyle_cast_expr ()
#7  0x0804f166 in print_source_expr ()
#8  0x0804f319 in print_source_binary_operator ()
#9  0x0804f7ce in print_source_stmt ()
#10 0x0804e546 in print_source_compound_stmt ()
#11 0x0804e8a8 in print_source_function_decl ()
#12 0x0804d3b3 in ASTNode_print_source ()
#13 0x080540a7 in ASTUnit_print ()
#14 0x08056b0f in mutant_save ()
#15 0x0805885f in mutants_save ()
#16 0x080566a8 in milu_multi_process_mutants ()
#17 0x08055ba8 in milu_save_mutants ()
#18 0x08049e29 in main ()

进入 $MILU_PATH,我发现几乎所有这些函数都在$MILU_PATH/src/mutation/. 其中之一是

void ASTUnit_print(ASTUnit * au, PrintMode mode, FILE * output)
{
    ASTNode  * ast = au->ast;

    switch(mode)
    {
    case PrintDot:
    {
        ASTNode_print_dot(ast, output);
        break;
    }
    case PrintSource:
    {
        ASTNode_print_source(ast, output);
        break;
    }
    case PrintHtml:
    {
        ASTNode_print_html(ast, output);
        break;
    }

    default:
    {

        g_log ("Milu",G_LOG_LEVEL_WARNING,"Unknown print mode") ;

        break;
    }
    }
}

我不知道为什么这些功能会导致故障。希望有人能帮助我。

4

0 回答 0