为了生成一些很棒的C程序突变体,我从GitHub克隆了Milu,成功编译并运行了它的例子,就像Compilation in Ubuntu
和Example
所说的那样。
但是,当我想生成我的c文件的突变体时,我使用gcc -E
处理c文件并运行Milu,然后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;
}
}
}
我不知道为什么这些功能会导致故障。希望有人帮助我。