dprintf.exp revision 1.5
1# Copyright (C) 2012-2015 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16 17if { [prepare_for_testing dprintf.exp "dprintf" {} {debug}] } { 18 return -1 19} 20 21set srcfile dprintf.c 22 23set bp_location1 [gdb_get_line_number "set breakpoint 1 here"] 24set dp_location1 [gdb_get_line_number "set dprintf 1 here"] 25 26if ![runto main] { 27 return -1 28} 29 30gdb_test "dprintf" "Format string required" 31 32gdb_test "dprintf foo" "Format string required" 33 34gdb_test "dprintf 29" "Format string required" 35 36delete_breakpoints 37 38gdb_breakpoint "main" 39 40gdb_test "dprintf foo,\"At foo entry\\n\"" \ 41 "Dprintf .*" 42 43gdb_test "ignore \$bpnum 1" ".*Will ignore next crossing of breakpoint.*" 44 45gdb_test "dprintf $dp_location1,\"arg=%d, g=%d\\n\", arg, g" \ 46 "Dprintf .*" 47 48gdb_test_sequence "info breakpoints" "dprintf info 1" { 49 "\[\r\n\]Num Type Disp Enb Address +What" 50 "\[\r\n\]2 breakpoint" 51 "\[\r\n\]3 dprintf" 52 "\[\r\n\] printf \"At foo entry\\\\n\"" 53 "\[\r\n\]4 dprintf" 54 "\[\r\n\] printf \"arg=%d, g=%d\\\\n\", arg, g" 55} 56 57gdb_test "break $bp_location1" \ 58 "Breakpoint .*" 59 60gdb_run_cmd 61 62gdb_test "" "Breakpoint" 63 64gdb_test "continue" "arg=1234, g=1234.*" "1st dprintf, gdb" 65 66gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" "2nd dprintf, gdb" 67 68# The "call" style depends on having I/O functions available, so test. 69 70if ![target_info exists gdb,noinferiorio] { 71 72 # Now switch styles and rerun; in the absence of redirection the 73 # output should be the same. 74 75 gdb_test_no_output "set dprintf-style call" "Set dprintf style to call" 76 77 gdb_run_cmd 78 79 gdb_test "" "Breakpoint" 80 81 gdb_test "continue" "At foo entry.*arg=1234, g=1234.*" "1st dprintf, call" 82 83 gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" "2nd dprintf, call" 84 85 gdb_test_no_output "set dprintf-function fprintf" "Set dprintf function" 86 gdb_test_no_output "set dprintf-channel stderr" "Set dprintf channel" 87 88 gdb_run_cmd 89 90 gdb_test "" "Breakpoint" 91 92 gdb_test "continue" "At foo entry.*arg=1234, g=1234.*" \ 93 "1st dprintf, fprintf" 94 95 gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" \ 96 "2nd dprintf, fprintf" 97} 98 99# Now test the "agent" style. 100 101set target_can_dprintf 1 102set msg "set dprintf style to agent" 103gdb_test_multiple "set dprintf-style agent" $msg { 104 -re "warning: Target cannot run dprintf commands.*\r\n$gdb_prompt $" { 105 106 # The target reports that it doesn't support target side 107 # commands at all. 108 set target_can_dprintf 0 109 unsupported "$msg" 110 } 111 -re ".*$gdb_prompt $" { 112 pass "$msg" 113 } 114} 115 116if $target_can_dprintf { 117 gdb_run_cmd 118 119 gdb_test "" "Breakpoint" 120 121 # Even if the the target reports that it does support target side 122 # commands, we can only tell that it supports them in combination 123 # with a particular breakpoint type (Z0, Z1, etc.) when we try to 124 # insert the breakpoint. When "set breakpoint always-inserted is 125 # off", that'll be on next continue. 126 set msg "1st dprintf, agent" 127 gdb_test_multiple "continue" $msg { 128 -re "Warning:.*Target doesn't support breakpoints that have target side commands.*\r\n$gdb_prompt $" { 129 set target_can_dprintf 0 130 unsupported "$msg" 131 } 132 -re "Breakpoint \[0-9\]+, foo .*$gdb_prompt $" { 133 pass "$msg" 134 } 135 } 136 137 if $target_can_dprintf { 138 gdb_test "continue" "Breakpoint \[0-9\]+, foo .*" "2nd dprintf, agent" 139 140 gdb_test_sequence "info breakpoints" "dprintf info 2" { 141 "\[\r\n\]Num Type Disp Enb Address +What" 142 "\[\r\n\]2 breakpoint" 143 "\[\r\n\]\tbreakpoint already hit 2 times" 144 "\[\r\n\]3 dprintf" 145 "\[\r\n\]\tbreakpoint already hit 2 times" 146 "\[\r\n\] agent-printf \"At foo entry\\\\n\"" 147 "\[\r\n\]4 dprintf" 148 "\[\r\n\]\tbreakpoint already hit 2 times" 149 "\[\r\n\] agent-printf \"arg=%d, g=%d\\\\n\", arg, g" 150 } 151 } 152} 153 154gdb_test "set dprintf-style foobar" "Undefined item: \"foobar\"." \ 155 "Set dprintf style to an unrecognized type" 156 157# Test that force-disabling the BreakpointCommands RSP feature works 158# as expected. dprintf relies on support for target-side breakpoint 159# commands --- use it as proxy. 160if [gdb_is_target_remote] { 161 gdb_test_no_output "set remote breakpoint-commands-packet off" 162 gdb_test "set dprintf-style agent" \ 163 "warning: Target cannot run dprintf commands.*" \ 164 "set dprintf-style agent, with feature disabled" 165} 166