为了生成一些很棒的 C 程序变种,我从GitHub克隆了 Milu ,成功编译并运行了它的示例,就像Compilation in Ubuntu
和Example
说的一样。但是,当我想生成我的 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;
}
}
}
我不知道为什么这些功能会导致故障。希望有人能帮助我。