⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sepdebug.exp

📁 这个是LINUX下的GDB调度工具的源码
💻 EXP
📖 第 1 页 / 共 3 页
字号:
#   Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999,#   2000, 2002, 2003, 2004#   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 2 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, write to the Free Software# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  # Please email any bugs, comments, and/or additions to this file to:# bug-gdb@prep.ai.mit.edu# Based on break.exp, written by Rob Savoye. (rob@cygnus.com)# Modified to test gdb's handling of separate debug info files.# This file has two parts. The first is testing that gdb behaves# normally after reading in an executable and its corresponding# separate debug file. The second moves the .debug file to a different# location and tests the "set debug-file-directory" command.if $tracelevel then {    strace $tracelevel}## test running programs#set prms_id 0set bug_id 0set testfile "sepdebug"set srcfile ${testfile}.cset binfile ${objdir}/${subdir}/${testfile}if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-w}] != "" } {    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."}# FIXME: this is nasty. We need to check for the stabs debug format.# To do this we must run gdb on the unstripped executable, list 'main'# (as to have a default source file), use get_debug_format (which does# 'info source') and then see if the debug info is stabs. If so, we# bail out.  We cannot do this any other way because get_debug_format# finds out the debug format using gdb itself, and in case of stabs we# get an error loading the program if it is already stripped.  An# alternative would be to find out the debug info from the flags# passed to dejagnu when the test is run.gdb_exitgdb_startgdb_reinitialize_dir $srcdir/$subdirgdb_load ${binfile}gdb_test "list main" "" ""get_debug_formatif { [test_debug_format "stabs"] } then {    # the separate debug info feature doesn't work well in binutils with stabs.    # It produces a corrupted debug info only file, and gdb chokes on it.    # It is almost impossible to capture the failing message out of gdb,    # because it happens inside gdb_load. At that point any error message    # is intercepted by dejagnu itself, and, because of the error threshold,    # any faulty test result is changed into an UNRESOLVED.     # (see dejagnu/lib/framework.exp)    unsupported "no separate debug info handling with stabs"    return -1} elseif { [test_debug_format "unknown"] } then {    # gdb doesn't know what the debug format is. We are out of luck here.     unsupported "unknown debugging format"    return -1}gdb_exit# Note: the procedure gdb_gnu_strip_debug will produce an executable called# ${binfile}, which is just like the executable ($binfile) but without# the debuginfo. Instead $binfile has a .gnudebuglink section which contains# the name of a debuginfo only file. This file will be stored in the# gdb.base/.debug subdirectory.if [gdb_gnu_strip_debug $binfile] {    # check that you have a recent version of strip and objcopy installed    unsupported "cannot produce separate debug info files"    return -1}gdb_exitgdb_startgdb_reinitialize_dir $srcdir/$subdirgdb_load ${binfile}if [target_info exists gdb_stub] {    gdb_step_for_stub;}## test simple breakpoint setting commands## Test deleting all breakpoints when there are none installed,# GDB should not prompt for confirmation.# Note that gdb-init.exp provides a "delete_breakpoints" proc# for general use elsewhere.send_gdb "delete breakpoints\n"gdb_expect {     -re "Delete all breakpoints.*$" {	    send_gdb "y\n"	    gdb_expect {		-re "$gdb_prompt $" {		    fail "Delete all breakpoints when none (unexpected prompt)"		}		timeout	{ fail "Delete all breakpoints when none (timeout after unexpected prompt)" }	    }	}     -re ".*$gdb_prompt $"       { pass "Delete all breakpoints when none" }    timeout	            { fail "Delete all breakpoints when none (timeout)" }}## test break at function#gdb_test "break main" \    "Breakpoint.*at.* file .*$srcfile, line.*" \    "breakpoint function"## test break at quoted function#gdb_test "break \"marker2\"" \    "Breakpoint.*at.* file .*$srcfile, line.*" \    "breakpoint quoted function"## test break at function in file#gdb_test "break $srcfile:factorial" \    "Breakpoint.*at.* file .*$srcfile, line.*" \    "breakpoint function in file"set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]## test break at line number## Note that the default source file is the last one whose source text# was printed.  For native debugging, before we've executed the# program, this is the file containing main, but for remote debugging,# it's wherever the processor was stopped when we connected to the# board.  So, to be sure, we do a list command.#gdb_test "list main" \    ".*main \\(argc, argv, envp\\).*" \    "use `list' to establish default source file"gdb_test "break $bp_location1" \    "Breakpoint.*at.* file .*$srcfile, line $bp_location1\\." \    "breakpoint line number"## test duplicate breakpoint#gdb_test "break $bp_location1" \    "Note: breakpoint \[0-9\]+ also set at pc.*Breakpoint \[0-9\]+ at.* file .*$srcfile, line $bp_location1\\." \    "breakpoint duplicate"set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]## test break at line number in file#gdb_test "break $srcfile:$bp_location2" \    "Breakpoint.*at.* file .*$srcfile, line $bp_location2\\." \    "breakpoint line number in file"set bp_location3 [gdb_get_line_number "set breakpoint 3 here"]set bp_location4 [gdb_get_line_number "set breakpoint 4 here"]## Test putting a break at the start of a multi-line if conditional.# Verify the breakpoint was put at the start of the conditional.#gdb_test "break multi_line_if_conditional" \    "Breakpoint.*at.* file .*$srcfile, line $bp_location3\\." \    "breakpoint at start of multi line if conditional"gdb_test "break multi_line_while_conditional" \    "Breakpoint.*at.* file .*$srcfile, line $bp_location4\\." \    "breakpoint at start of multi line while conditional"set bp_location5 [gdb_get_line_number "set breakpoint 5 here"]set bp_location6 [gdb_get_line_number "set breakpoint 6 here"]## check to see what breakpoints are set#if [target_info exists gdb_stub] {    set main_line $bp_location5} else {    set main_line $bp_location6}set bp_location7 [gdb_get_line_number "set breakpoint 7 here"]set bp_location8 [gdb_get_line_number "set breakpoint 8 here"]set bp_location9 [gdb_get_line_number "set breakpoint 9 here"]gdb_test "info break" \    "Num Type\[ \]+Disp Enb Address\[ \]+What.*\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:$main_line.*\[0-9\]+\[\t \]+breakpoint     keep y.* in marker2 at .*$srcfile:($bp_location8|$bp_location9).*\[0-9\]+\[\t \]+breakpoint     keep y.* in factorial at .*$srcfile:$bp_location7.*\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:$bp_location1.*\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:$bp_location1.*\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:$bp_location2.*\[0-9\]+\[\t \]+breakpoint     keep y.* in multi_line_if_conditional at .*$srcfile:$bp_location3.*\[0-9\]+\[\t \]+breakpoint     keep y.* in multi_line_while_conditional at .*$srcfile:$bp_location4" \    "breakpoint info"# FIXME: The rest of this test doesn't work with anything that can't# handle arguments.# Huh? There doesn't *appear* to be anything that passes arguments# below.if [istarget "mips-idt-*"] then {    return}## run until the breakpoint at main is hit. For non-stubs-using targets.#if ![target_info exists use_gdb_stub] {  if [istarget "*-*-vxworks*"] then {    send_gdb "run vxmain \"2\"\n"    set timeout 120    verbose "Timeout is now $timeout seconds" 2  } else {	send_gdb "run\n"  }  gdb_expect {    -re "The program .* has been started already.*y or n. $" {	send_gdb "y\n"	exp_continue    }    -re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $"\	                    { pass "run until function breakpoint" }    -re ".*$gdb_prompt $"       { fail "run until function breakpoint" }    timeout	            { fail "run until function breakpoint (timeout)" }  }} else {    if ![target_info exists gdb_stub] {	gdb_test continue ".*Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.*\{.*" "stub continue"    }}## run until the breakpoint at a line number#gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location1.*$bp_location1\[\t \]+printf.*factorial.*" \			"run until breakpoint set at a line number"## Run until the breakpoint set in a function in a file#for {set i 6} {$i >= 1} {incr i -1} {	gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, factorial \\(value=$i\\) at .*$srcfile:$bp_location7.*$bp_location7\[\t \]+.*if .value > 1. \{.*" \			"run until file:function($i) breakpoint"}## Run until the breakpoint set at a quoted function#gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, (0x\[0-9a-f\]+ in )?marker2 \\(a=43\\) at .*$srcfile:($bp_location8|$bp_location9).*" \		"run until quoted breakpoint"## run until the file:function breakpoint at a line number in a file#gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location2.*$bp_location2\[\t \]+argc = \\(argc == 12345\\);.*" \		"run until file:linenum breakpoint"# Test break at offset +1set bp_location10 [gdb_get_line_number "set breakpoint 10 here"]gdb_test "break +1" \    "Breakpoint.*at.* file .*$srcfile, line $bp_location10\\." \    "breakpoint offset +1"# Check to see if breakpoint is hit when stepped ontogdb_test "step" \    ".*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location10.*$bp_location10\[\t \]+return argc;.*breakpoint 10 here.*" \    "step onto breakpoint"## delete all breakpoints so we can start over, course this can be a test too#delete_breakpoints## test temporary breakpoint at function#gdb_test "tbreak main" "Breakpoint.*at.* file .*$srcfile, line.*" "Temporary breakpoint function"## test break at function in file#gdb_test "tbreak $srcfile:factorial" "Breakpoint.*at.* file .*$srcfile, line.*" \	"Temporary breakpoint function in file"## test break at line number#send_gdb "tbreak $bp_location1\n"gdb_expect {    -re "Breakpoint.*at.* file .*$srcfile, line $bp_location1.*$gdb_prompt $" { pass "Temporary breakpoint line number #1" }	-re ".*$gdb_prompt $"   { pass "Temporary breakpoint line number #1" }	timeout	    { fail "breakpoint line number #1 (timeout)" }}gdb_test "tbreak $bp_location6" "Breakpoint.*at.* file .*$srcfile, line $bp_location6.*" "Temporary breakpoint line number #2"## test break at line number in file#send_gdb "tbreak $srcfile:$bp_location2\n"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -