# This testcase is part of GDB, the GNU debugger. # # Copyright 2013-2024 Free Software Foundation, Inc. # # Contributed by Intel Corp. # # 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 . require allow_btrace_tests # start fresh - without an executable gdb_exit gdb_start # record cannot be stopped, if it was never active gdb_test "record stop" "No recording is currently active\\..*" "record stop without target" # btrace cannot be enabled without a running inferior gdb_test "record btrace" "The program is not being run\\." "record btrace without running program" # no function and no instruction history without btrace enabled gdb_test "record function-call-history" "No recording is currently active\\..*" "record function-call-history without target" gdb_test "record instruction-history" "No recording is currently active\\..*" "record instruction-history without target" gdb_test "info record" "No recording is currently active\\." "info record without target" standard_testfile if [prepare_for_testing "failed to prepare" $testfile {} {debug}] { return -1 } if ![runto_main] { return -1 } # enable btrace gdb_test_no_output "record btrace" "record btrace" gdb_test "record function-call-history" "No trace\\." "record function-call-history without trace" gdb_test "record instruction-history" "No trace\\." "record instruction-history without trace" # btrace cannot be enabled twice gdb_test "record btrace" "The process is already being recorded\\. Use \"record stop\" to stop recording first\\." "record btrace the second time" # full record cannot be activated as long as btrace is active gdb_test "record full" "The process is already being recorded\\. Use \"record stop\" to stop recording first\\." "record full cannot be enabled" # no trace recorded yet gdb_test "info record" "Active record target: record-btrace\r .*\r Recorded 0 instructions in 0 functions \\\(0 gaps\\\) for thread 1.*\\." "info record without trace" # stop btrace record gdb_test "record stop" "Process record is stopped and all execution logs are deleted\\." gdb_test "record stop" "No recording is currently active\\..*" "record stop the second time" # enable btrace again gdb_test_no_output "record btrace" "record btrace re-enable" gdb_test "record btrace" "The process is already being recorded\\. Use \"record stop\" to stop recording first\\." "record btrace re-enable twice" # continue to the end and make sure we don't die gdb_test "continue" ".*Inferior.*exited.*" "continue to end" # allow_gdbserver_tests requires GDB not running. gdb_exit # skip the rerun test when using gdbserver # otherwise rerun twice, target should be automatically disabled load_lib gdbserver-support.exp require allow_gdbserver_tests clean_restart $testfile if ![runto_main] { return -1 } if ![runto_main] { return -1 } # make sure record-btrace can be enabled after re-run clean_restart $testfile if ![runto_main] { return -1 } gdb_test_no_output "record btrace" "enable after restart" if ![runto_main] { return -1 } gdb_test_no_output "record btrace" "enable after re-run"