let dump_state_file name initial_state args =
(try
let size = String.length name in
let name =
if size > 23 then
String.sub name 23 (size - 23)
else failwith "no filename specified"
in
let n = try DumpFileCounters.find name with Not_found -> 0 in
DumpFileCounters.add name (n+1);
let file = Format.sprintf "%s_%d" name n in
let ch = open_out file in
let fmt = Format.formatter_of_out_channel ch in
let l = fst (CurrentLoc.get ()) in
Value_parameters.feedback ~current:true "Dumping state in file '%s'%t"
file Value_util.pp_callstack;
Format.fprintf fmt "DUMPING STATE at file %s line %d@."
l.Lexing.pos_fname l.Lexing.pos_lnum;
if args <> [] then Format.fprintf fmt "Args: %a@." pretty_actuals args;
Cvalue.Model.pretty fmt initial_state;
close_out ch
with e ->
Value_parameters.warning ~current:true ~once:true
"Error during, or invalid call to Frama_C_dump_each_file (%s). Ignoring"
(Printexc.to_string e)
);
None, initial_state, Location_Bits.Top_Param.bottom