This may be more of a question for GDB folks...but I'll post it here
because it relates to embedded systems as well.
I'm trying to validate some signal processing software on an embedded
Virtex4 PowerPC 405. Basically, the validation consists of calling
functions and looking at their outputs. Over time, there are several
thousand numbers to look at, so manually looking at each number at a
break point would be very time consuming (to put it mildly).
The normal way I would go about doing this is to print out the data
(e.g. to a serial port) and post-process the data somewhere else. But
on this particular target, I don't have a serial port. So I thought
about using GDB's breakpoint command list feature. When the software
has data it wants to print out, it calls a function "log_stuff". I then
set a breakpoint and command list in the "log_stuff" function, which
writes out the variables I'm interested in checking out to a file named
outputfile.bin. E.g. the following command file does this:
break log_stuff
commands
silent
if (variable_logging_enabled)
append value outputfile.bin stuff1_variable
append value outputfile.bin stuff2_variable
end
cont
end
The problem I have with this approach is that GDB doesn't finish writing
out everything before it continues executing the program, so a backlog
develops. So my first question would be, is there some GDB "flush" like
command I could run before the cont statement?
Second question would be - is there an easier way to accomplish what I'm
trying to do, which is basically emulate a serial port with GDB.
Tim
--- "Martin, Tim" <tim.martin@viasat.com> wrote:
This may be more of a question for GDB folks...but I'll post
it here
because it relates to embedded systems as well.
I'm trying to validate some signal processing software on an
embedded
Virtex4 PowerPC 405. Basically, the validation consists of
calling
functions and looking at their outputs. Over time, there are
several
thousand numbers to look at, so manually looking at each
number at a
break point would be very time consuming (to put it mildly).
The normal way I would go about doing this is to print out the
data
(e.g. to a serial port) and post-process the data somewhere
else. But
on this particular target, I don't have a serial port. So I
thought
about using GDB's breakpoint command list feature. When the
software
has data it wants to print out, it calls a function
"log_stuff". I then
set a breakpoint and command list in the "log_stuff" function,
which
writes out the variables I'm interested in checking out to a
file named
outputfile.bin. E.g. the following command file does this:
break log_stuff
commands
silent
if (variable_logging_enabled)
append value outputfile.bin stuff1_variable
append value outputfile.bin stuff2_variable
end
cont
end
The problem I have with this approach is that GDB doesn't
finish writing
out everything before it continues executing the program, so a
backlog
develops. So my first question would be, is there some GDB
"flush" like
command I could run before the cont statement?
Second question would be - is there an easier way to
accomplish what I'm
trying to do, which is basically emulate a serial port with
GDB.
Tim
Use NetConsole or remotey log it with syslog...
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
Tim,
How about something a bit simpler like running gdb within a 'script'
context, which will log your session to a file. Get gdb to print the
variables to the screen (using 'print' or whatever), wrap your data with
easily searchable characters (eg. ***data1 data2 data3***), then filter
your data from the script file with sed/awk or perl scripts?
A bit brute force, but bound to work.
regards,
Ben
On Thu, 2006-08-10 at 10:14 -0700, Martin, Tim wrote:
This may be more of a question for GDB folks...but I'll post it here
because it relates to embedded systems as well.
I'm trying to validate some signal processing software on an embedded
Virtex4 PowerPC 405. Basically, the validation consists of calling
functions and looking at their outputs. Over time, there are several
thousand numbers to look at, so manually looking at each number at a
break point would be very time consuming (to put it mildly).
The normal way I would go about doing this is to print out the data
(e.g. to a serial port) and post-process the data somewhere else. But
on this particular target, I don't have a serial port. So I thought
about using GDB's breakpoint command list feature. When the software
has data it wants to print out, it calls a function "log_stuff". I
then set a breakpoint and command list in the "log_stuff" function,
which writes out the variables I'm interested in checking out to a
file named outputfile.bin. E.g. the following command file does this:
break log_stuff
commands
silent
if (variable_logging_enabled)
append value outputfile.bin stuff1_variable
append value outputfile.bin stuff2_variable
end
cont
end
The problem I have with this approach is that GDB doesn't finish
writing out everything before it continues executing the program, so a
backlog develops. So my first question would be, is there some GDB
"flush" like command I could run before the cont statement?
Second question would be - is there an easier way to accomplish what
I'm trying to do, which is basically emulate a serial port with GDB.
Tim
_______________________________________________
Linuxppc-embedded mailing list
Linuxppc-embedded@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-embedded