mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
4e5a4f5850
This works like 'start' but it stops at the first instruction rather than the first line in main(). This is useful if one wants to single step through runtime linker startup. While here, introduce a RUN_ARGS_HELP macro for shared help text between run, start, and starti. This includes expanding the help for start and starti to include details from run's help text. gdb/ChangeLog: * NEWS (Changes since GDB 8.0): Add starti. * infcmd.c (enum run_break): New. (run_command_1): Queue pending event for RUN_STOP_AT_FIRST_INSN case. (run_command): Use enum run_how. (start_command): Likewise. (starti_command): New function. (RUN_ARGS_HELP): New macro. (_initialize_infcmd): Use RUN_ARGS_HELP for run and start commands. Add starti command. gdb/doc/ChangeLog: * gdb.texinfo (Starting your Program): Add description of starti command. Mention starti command as an alternative for debugging the elaboration phase. gdb/testsuite/ChangeLog: * gdb.base/starti.c: New file. * gdb.base/starti.exp: New file. * lib/gdb.exp (gdb_starti_cmd): New procedure.
52 lines
1.5 KiB
Plaintext
52 lines
1.5 KiB
Plaintext
# Copyright 2017 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/>.
|
|
|
|
|
|
standard_testfile
|
|
|
|
if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
|
|
return -1
|
|
}
|
|
|
|
# Define a stop hook that outputs the value of 'x'
|
|
|
|
gdb_test_multiple "define hook-stop" "hook-stop" {
|
|
-re "Type commands for definition of \"hook-stop\".\r\nEnd with a line saying just \"end\".\r\n>$" {
|
|
gdb_test "print x\nend" "" "hook-stop"
|
|
}
|
|
}
|
|
|
|
if { [gdb_starti_cmd] < 0 } {
|
|
untested starti
|
|
return -1
|
|
}
|
|
|
|
# The program should stop at the first instruction, so the constructor
|
|
# should not have run yet and 'x' should be 0.
|
|
|
|
gdb_test_sequence "" "starti" {
|
|
"Program stopped."
|
|
"\\$1 = 0"
|
|
}
|
|
|
|
# Continue to the start of main(). The constructor should have run so
|
|
# 'x' should be 1.
|
|
|
|
gdb_breakpoint main
|
|
gdb_test_sequence "continue" "" {
|
|
"\\$2 = 1"
|
|
".*Breakpoint .*main \\(\\) at .*starti.c.*"
|
|
}
|