31
31
-define(chunk_size,1000). % number of bytes read from crashdump at a time
32
32
-define(max_line_size,500). % max number of bytes (i.e. characters) the
33
33
% line/1 function can return
34
-define(backwards_chunk_size,10000). % number of bytes read from crashdump
35
% at a time when reading atoms
35
37
%%%-----------------------------------------------------------------
36
38
%%% Translate an old dump to a newer format
113
115
drop_line(Read), % divider
114
116
write(Write,"=atoms\n"),
115
{_,{Atoms,N}} = read_to_empty_line_reverse(Read),
116
write(Write,[Atoms,"=num_atoms:",integer_to_list(N),"\n"]),
117
translate_atoms(Read,Write),
118
% {_,{Atoms,N}} = read_to_empty_line_reverse(Read),
119
% write(Write,[Atoms,"=num_atoms:",integer_to_list(N),"\n"]),
117
120
translate(Read,Write);
118
121
"Memory allocation information\n" ->
119
122
write(Write,"=old_instr_data\n"),
902
905
translate_fun(Read,Write)
909
translate_atoms(Read,Write) ->
910
StartPos = get_pos(Read),
911
jump_to_empty_line_or_eof(Read),
912
EndPos = get_pos(Read),
913
set_pos(Read,EndPos-2),
914
translate_atoms(Read,Write,StartPos,1),
915
set_pos(Read,EndPos).
917
translate_atoms(Read,Write,StartPos,N) ->
918
{Atom,Pos} = read_line_backwards(Read,[]),
919
write(Write,[Atom,"\n"]),
921
write(Write,["=num_atoms:",integer_to_list(N),"\n"]);
923
translate_atoms(Read,Write,StartPos,N+1)
927
{ok,Pos0} = file:position(Fd,cur),
937
file:position(Fd,Pos).
939
jump_to_empty_line_or_eof(Fd) ->
946
jump_to_empty_line_or_eof(Fd)
949
read_line_backwards(Fd,Line) ->
950
{CurPos,Str} = get_backwards_chunk(Fd),
951
read_line_backwards(Fd,CurPos,Str,Line).
953
read_line_backwards(_Fd,Pos,[$\n|Str],Line) ->
957
read_line_backwards(Fd,Pos,[$\r|Str],Line) ->
958
read_line_backwards(Fd,Pos-1,Str,Line);
959
read_line_backwards(Fd,Pos,[Char|Str],Line) ->
960
read_line_backwards(Fd,Pos-1,Str,[Char|Line]);
961
read_line_backwards(Fd,_Pos,[],Line) ->
962
read_line_backwards(Fd,Line).
965
get_backwards_chunk(Fd) ->
969
{ok,Pos} = file:position(Fd,cur),
970
file:position(Fd,{cur,-?backwards_chunk_size}),
971
{ok,Bin} = file:read(Fd,?backwards_chunk_size),
972
file:position(Fd,{cur,-?backwards_chunk_size}),
973
{Pos,lists:reverse(binary_to_list(Bin))};
905
980
%%%-----------------------------------------------------------------
906
981
%%% Common library