fpc/packages/base/gdbint/symify.pp
fpc 790a4fe2d3 * log and id tags removed
git-svn-id: trunk@42 -
2005-05-21 09:42:41 +00:00

78 lines
1.6 KiB
ObjectPascal

{
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.