1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 | {
$Id: symify.pp,v 1.3 2005/02/14 17:13:19 peter Exp $
Copyright (c) 1998 by Peter Vreman
Translate backtrace addresses into file and line info
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
program symify;uses GDBInt;
var
gdb : tgdbinterface;
procedure processlog(const fn:string);
var
t : text;
hs,s : string; code : word;
i,
addr : longint;
sym : tsyminfo;
begin assign(t,fn);
{$I-}
reset(t);
{$I+}
if ioresult<>0 then exit;
while not eof(t) do
begin
readln(t,s);
i:=pos('0x',s); if i=3 then
begin
hs:='$'+Copy(s,5,8);
Val(hs,addr,code);
if code=0 then begin
gdb.GetAddrSymInfo(addr,sym);
Write(Copy(s,1,12));
if assigned(sym.funcname) then
write(' in ',sym.funcname,'+',sym.offset); if assigned(sym.fname) then
writeln(' ',sym.fname,':',sym.line)
else
writeln;
end else
writeln(s);
end
else
writeln(s); end;
close(t);
end;
begin
if paramcount<2 then
begin
writeln('usage: symify <log> <file>');
halt(1); end;
gdb.init;
writeln('loading ',paramstr(2));
gdb.gdb_command('file '+paramstr(2));
writeln('parsing ',paramstr(1)); processlog(paramstr(1));
gdb.done;
end.
{
$Log: symify.pp,v $ Revision 1.3 2005/02/14 17:13:19 peter
* truncate log
} |