Re: [RFC] testing specifically for process record

Hui Zhu
2009-10-26T08:36:52Z

Thanks for your test, Michael.

I try it in i386 ubuntu.

=== gdb tests ===

Schedule of variations:
precord

Running target precord
Using /usr/share/dejagnu/baseboards/precord.exp as board description
file for target.
Using /usr/share/dejagnu/baseboards/unix.exp as board description file
for target.
Using /usr/share/dejagnu/config/unix.exp as generic interface file for target.
Using ../src/gdb/testsuite/config/unix.exp as tool-and-target-specific
interface file.
Running ../src/gdb/testsuite/gdb.reverse/precord.exp ...

=== gdb Summary ===

# of expected passes 30
/usr/local/bin/gdb version 7.0.50.20091026-cvs -nw -nx

I am OK with it.

Thanks,
hui

On Fri, Oct 23, 2009 at 03:38, Michael Snyder <msnyder@vmware.com> wrote:
> Michael Snyder wrote:
>>
>> There are a number of commands specific to process record,
>> as opposed to reverse debugging, which we don't have tests
>> for yet.  For instance,
>>
>>  set/show insn-number-max
>>  set/show stop-at-limit
>>  info record
>>  record delete
>>  record stop
>>
>> Plus, there is the behavior of the execution log that should
>> be tested under various combinations of those settings.
>>
>> Here is an attempt that I've started on.  I'd appreciate any
>> suggestions, especially with respect to other tests that you
>> think should be added.  The more things we test, the more
>> corner cases we can find and fix.  (there are a couple of
>> failures already in there due to corner cases and spellings).
>>
>> And Hui -- I'd be delighted if you would take over the
>> ownership of this test!   ;-)
>
> Updated versions.
>
>
>
> # Copyright 2009 Free Software Foundation, Inc.
>
> # This program is free software; you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> # the Free Software Foundation; either version 3 of the License, or
> # (at your option) any later version.
> #
> # 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.  See the
> # GNU General Public License for more details.
> #
> # You should have received a copy of the GNU General Public License
> # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
>
> # This file is part of the GDB testsuite.
>
> # Test precord commands.
>
> set testfile "precord"
> set srcfile  ${testfile}.c
>
> if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
>    return -1
> }
>
> #
> # Test "show record insn-number-max"
> #
>
> gdb_test "show record insn-number-max" \
>    "Record/replay buffer limit is .*" "Show record insn-number-max"
>
> gdb_test "set record insn-number-max 0" \
>    "" "Set insn-number-max to unlimited"
>
> gdb_test "show record insn-number-max" \
>    "Record/replay buffer limit is unlimited\." \
>    "Show insn-number-max unlimited"
>
> gdb_test "set record insn-number-max 100000" \
>    "" "Set insn-number-max to 100000"
>
> gdb_test "show record insn-number-max" \
>    "Record/replay buffer limit is 100000\." "Show insn-number-max 100000"
>
> #
> # Test "show record stop-at-limit"
> #
>
> gdb_test "show record stop-at-limit" \
>    "Whether record/replay stops when record/replay buffer becomes full is.*"
> \
>    "Show record stop-at-limit"
>
>
> set main_location [gdb_get_line_number "break in main"]
>
> runto main
>
> gdb_test "record" "" "Turn on process record"
> # FIXME: command ought to acknowledge, so we can test if it succeeded.
>
> #
> # Test "Do you want to auto delete previous execution log entries"
> #
>
> gdb_test "continue" "" "Continue until buffer full" \
>    "Do you want to auto delete .* or n. " \
>    "n"
>
> gdb_test "info record" "Log contains 100000 instructions.*" \
>    "verify buffer is full"
>
> gdb_test "set record insn-number-max 200000" \
>    "" "increase insn-number-max to 200000"
>
> gdb_test "continue" "" "Continue until buffer full again" \
>    "Do you want to auto delete .* or n. " \
>    "n"
>
> gdb_test "info record" "Log contains 200000 instructions.*" \
>    "verify buffer full again"
>
> gdb_test "set record insn-number-max 100000" \
>    "" \
>    "decrease insn-number-max to 100000"
>
> gdb_test "set record stop-at-limit off" "" "set stop-at-limit off"
>
> gdb_test "info record" "Log contains 100000 instructions.*" \
>    "info record before stepi"
>
> gdb_test "stepi"
>
> gdb_test "info record" "Log contains 100000 instructions.*" \
>    "info record after stepi"
>
> gdb_test "set record insn-number-max 200000" \
>    "" "Increase insn-number-max again"
>
> gdb_test "reverse-continue" "No more reverse-execution history.*" \
>    "reverse-continue to start of log"
>
> gdb_test "info record" "Current instruction number is 0\..*" \
>    "verify back at beginning of log"
>
> gdb_test "continue" "No more reverse-execution history.*" \
>    "continue to end of log"
>
> gdb_test "info record" \
>    "Lowest recorded .*\[\r\n\]+Highest recorded .* 200000\..*" \
>    "info record at end of log"
>
> gdb_test "stepi" "" "stepi past end of log in record mode"
>
> gdb_test "info record" \
>    "Lowest recorded .*\[\r\n\]+Highest recorded .* 200002\..*" \
>    "info record past end of log"
>
> gdb_test "reverse-stepi 50000" "" "Back up 50000 instructions"
>
> gdb_test "info record" \
>    "Current instruction number is 150002\..*" \
>    "info record in middle of execution log"
>
> gdb_test "record delete" "" "record delete test" \
>    "Delete the log from this point forward .*..y or n. " "yes"
>
> gdb_test "info record" \
>    "Highest recorded .* is 150002.*Log contains 50001 instructions.*" \
>    "info record after delete"
>
> gdb_test "record stop" \
>    "Process record is stopped and all execution logs are deleted." \
>    "record stop"
>
> gdb_test "info record" \
>    "target record is not active.*" \
>    "info record after stop"
>
> gdb_test "frame" "" ""
>
>
>
>
>