| # Copyright (C) 1998-2013 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/>. |
| |
| # |
| # test special commands |
| # |
| |
| if { [skip_hp_tests] } then { continue } |
| |
| set testfile "run" |
| set srcfile ${testfile}.c |
| set binfile ${objdir}/${subdir}/${testfile} |
| if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } { |
| untested watch-cmd.exp |
| return -1 |
| |
| } |
| |
| if [get_compiler_info] { |
| return -1 |
| } |
| if { $gcc_compiled } then { continue } |
| |
| |
| gdb_exit |
| gdb_start |
| delete_breakpoints |
| gdb_reinitialize_dir $srcdir/$subdir |
| gdb_load ${binfile} |
| |
| |
| |
| proc watchpoint_command_test {} { |
| global gdb_prompt |
| |
| if [target_info exists noargs] { |
| verbose "Skipping watchpoint_command_test because of noargs." |
| return |
| } |
| |
| if { ![runto factorial] } then { gdb_suppress_tests } |
| # Don't depend upon argument passing, since most simulators don't currently |
| # support it. Bash value variable to be what we want. |
| gdb_test "p value=6" "" "set value to 6 in watchpoint_command_test" |
| delete_breakpoints |
| |
| # Verify that we can create a watchpoint, and give it a commands |
| # list that continues the inferior. We set the watchpoint on a |
| # local variable, too, so that it self-deletes when the watched |
| # data goes out of scope. |
| # |
| # What should happen is: Each time the watchpoint triggers, it |
| # continues the inferior. Eventually, the watchpoint will self- |
| # delete, when the watched variable is out of scope. But by that |
| # time, the inferior should have exited. GDB shouldn't crash or |
| # anything untoward as a result of this. |
| # |
| send_gdb "watch local_var\n" |
| gdb_expect { |
| -re ".*\[Ww\]atchpoint (\[0-9\]*): local_var.*$gdb_prompt $"\ |
| { pass "watch local_var" |
| set wp_id $expect_out(1,string) |
| send_gdb "commands $wp_id\n" |
| gdb_expect { |
| -re "Type commands for when breakpoint $wp_id is hit, one per line.*>"\ |
| { pass "begin commands on watch"} |
| -re "$gdb_prompt $"\ |
| {fail "begin commands on watch"} |
| timeout {fail "(timeout) begin commands on watch"} |
| } |
| } |
| -re "$gdb_prompt $"\ |
| {fail "watch local_var"} |
| timeout {fail "(timeout) watch local_var"} |
| } |
| # set wp_id $expect_out(1,string) |
| # send_gdb "commands $wp_id\n" |
| # gdb_expect { |
| # -re "Type commands for when breakpoint $wp_id is hit, one per line.*>"\ |
| # {pass "begin commands on watch"} |
| # -re "$gdb_prompt $"\ |
| # {fail "begin commands on watch"} |
| # timeout {fail "(timeout) begin commands on watch"} |
| # } |
| send_gdb "print value\n" |
| gdb_expect { |
| -re ">"\ |
| {pass "add print command to watch"} |
| -re "$gdb_prompt $"\ |
| {fail "add print command to watch"} |
| timeout {fail "(timeout) add print command to watch"} |
| } |
| send_gdb "continue\n" |
| gdb_expect { |
| -re ">"\ |
| {pass "add continue command to watch"} |
| -re "$gdb_prompt $"\ |
| {fail "add continue command to watch"} |
| timeout {fail "(timeout) add continue command to watch"} |
| } |
| send_gdb "end\n" |
| gdb_expect { |
| -re "$gdb_prompt $"\ |
| {pass "begin commands on watch"} |
| timeout {fail "(timeout) begin commands on watch"} |
| } |
| send_gdb "continue\n" |
| gdb_expect { |
| -re "Continuing.*\[Ww\]atchpoint $wp_id deleted because the program has left the block in.*which its expression is valid.*in main.*$gdb_prompt $"\ |
| {pass "continue with watch"} |
| -re "$gdb_prompt $"\ |
| {fail "continue with watch"} |
| timeout {fail "(timeout) continue with watch"} |
| } |
| send_gdb "continue\n" |
| gdb_expect { |
| -re "Continuing.*$gdb_prompt $"\ |
| {pass "continue until exit"} |
| -re "$gdb_prompt $"\ |
| {fail "continue until exit"} |
| timeout {fail "(timeout) continue until exit"} |
| } |
| } |
| |
| watchpoint_command_test |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |