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

📄 callfuncs.exp

📁 这个是LINUX下的GDB调度工具的源码
💻 EXP
📖 第 1 页 / 共 2 页
字号:
    gdb_test "p sum_args(4,{2,3,4,5})" " = 14"    gdb_test "p sum10 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)" " = 55"    gdb_test "p cmp10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)" " = 1"    gdb_test "p t_structs_c(struct_val1)" "= 120 'x'" \	"call inferior func with struct - returns char"    gdb_test "p t_structs_s(struct_val1)" "= 87" \	"call inferior func with struct - returns short"    gdb_test "p t_structs_i(struct_val1)" "= 76" \	"call inferior func with struct - returns int"    gdb_test "p t_structs_l(struct_val1)" "= 51" \	"call inferior func with struct - returns long"    gdb_test "p t_structs_f(struct_val1)" "= 2.12.*" \       	"call inferior func with struct - returns float"    gdb_test "p t_structs_d(struct_val1)" "= 9.87.*" \    	"call inferior func with struct - returns double"    gdb_test "p t_structs_a(struct_val1)" "= (.unsigned char .. )?\"foo\"" \    	"call inferior func with struct - returns char *"}# Procedure to get current content of all registers.global all_registers_contentset all_registers_content ""proc do_get_all_registers { } {    global gdb_prompt    global expect_out    global all_registers_content    set all_registers_content ""    send_gdb "info all-registers\n"    gdb_expect {	-re "info all-registers\r\n(.*)$gdb_prompt $" {	    set all_registers_content $expect_out(1,string)	}	default {}    }}# Start with a fresh gdb.gdb_exitgdb_startgdb_reinitialize_dir $srcdir/$subdirgdb_load ${binfile}gdb_test "set print sevenbit-strings" ""gdb_test "set print address off" ""gdb_test "set width 0" ""if { $hp_aCC_compiler } {    # Do not set language explicitly to 'C'.  This will cause aCC    # tests to fail because promotion rules are different.  Just let    # the language be set to the default.    if { ![runto_main] } {	gdb_suppress_tests;    }    # However, turn off overload-resolution for aCC.  Having it on causes    # a lot of failures.    gdb_test "set overload-resolution 0" ".*"} else {    if { ![set_lang_c] } {	gdb_suppress_tests;    } else {	if { ![runto_main] } {	    gdb_suppress_tests;	}    }}get_debug_format# Make sure that malloc gets called and that the floating point unit# is initialized via a call to t_double_values.gdb_test "next" "t_double_values\\(double_val1, double_val2\\);.*" \  "next to t_double_values"gdb_test "next" "t_structs_c\\(struct_val1\\);.*" \  "next to t_structs_c"# Save all register contents.do_get_all_registersset old_reg_content $all_registers_content# Perform function calls.do_function_calls# Check if all registers still have the same value.do_get_all_registersset new_reg_content $all_registers_contentif ![string compare $old_reg_content $new_reg_content] then {    pass "gdb function calls preserve register contents"} else {    set old_reg_content $all_registers_content    fail "gdb function calls preserve register contents"}# Set breakpoint at a function we will call from gdb.gdb_breakpoint add# Call function (causing a breakpoint hit in the call dummy) and do a continue,# make sure we are back at main and still have the same register contents.gdb_test "print add(4,5)" \	"The program being debugged stopped while.*" \	"stop at breakpoint in call dummy function"gdb_test "continue" "Continuing.*" "continue from call dummy breakpoint"if ![gdb_test "bt 2" \	      "#0  main.*" \	      "bt after continuing from call dummy breakpoint"] then {    do_get_all_registers    set new_reg_content $all_registers_content    if ![string compare $old_reg_content $new_reg_content] then {	pass "continue after stop in call dummy preserves register contents"    } else {	fail "continue after stop in call dummy preserves register contents"    }}# Call function (causing a breakpoint hit in the call dummy) and do a finish,# make sure we are back at main and still have the same register contents.gdb_test "print add(4,5)" "The program being debugged stopped while.*" \	"call function causing a breakpoint then do a finish"gdb_test "finish" \	 "Value returned is .* = 9" \	 "finish from call dummy breakpoint returns correct value"if ![gdb_test "bt 2" \	      "#0  main.*" \	      "bt after finishing from call dummy breakpoint"] then {    do_get_all_registers    set new_reg_content $all_registers_content    if ![string compare $old_reg_content $new_reg_content] then {	pass "finish after stop in call dummy preserves register contents"    } else {	fail "finish after stop in call dummy preserves register contents"    }}# Call function (causing a breakpoint hit in the call dummy) and do a return# with a value, make sure we are back at main with the same register contents.gdb_test "print add(4,5)" "The program being debugged stopped while.*" \	"call function causing a breakpoint and then do a return"if ![gdb_test "return 7" \	      "#0  main.*" \	      "back at main after return from call dummy breakpoint" \	      "Make add return now. .y or n.*" \	      "y"] then {    do_get_all_registers    set new_reg_content $all_registers_content    if ![string compare $old_reg_content $new_reg_content] then {	pass "return after stop in call dummy preserves register contents"    } else {	fail "return after stop in call dummy preserves register contents"    }}# Call function (causing a breakpoint hit in the call dummy), and# call another function from the call dummy frame (thereby setting up# several nested call dummy frames).  Test that backtrace and finish# work when several call dummies are nested.gdb_breakpoint sum10gdb_breakpoint t_small_valuesgdb_test "print add(2,3)" "The program being debugged stopped while.*" \	"stop at nested call level 1"gdb_test "backtrace" \	"\#0  add \\(a=2, b=3\\).*\#1  <function called from gdb>.*\#2  main.*" \	"backtrace at nested call level 1"gdb_test "print add(4,5)" "The program being debugged stopped while.*" \	"stop at nested call level 2"gdb_test "backtrace" \	"\#0  add \\(a=4, b=5\\).*\#1  <function called from gdb>.*\#2  add \\(a=2, b=3\\).*\#3  <function called from gdb>.*\#4  main.*" \	"backtrace at nested call level 2"gdb_test "print sum10(2,4,6,8,10,12,14,16,18,20)" \	"The program being debugged stopped while.*" \	"stop at nested call level 3"gdb_test "backtrace" \	"\#0  sum10 \\(i0=2, i1=4, i2=6, i3=8, i4=10, i5=12, i6=14, i7=16, i8=18, i9=20\\).*\#1  <function called from gdb>.*\#2  add \\(a=4, b=5\\).*\#3  <function called from gdb>.*\#4  add \\(a=2, b=3\\).*\#5  <function called from gdb>.*\#6  main.*" \	"backtrace at nested call level 3"gdb_test "print t_small_values(1,3,5,7,9,11,13,15,17,19)" \	"The program being debugged stopped while.*" \	"stop at nested call level 4"gdb_test "backtrace" \	"\#0  t_small_values \\(arg1=1 '.001', arg2=3, arg3=5, arg4=7 '.a', arg5=9, arg6=11 '.v', arg7=13, arg8=15, arg9=17, arg10=19\\).*\#2  sum10 \\(i0=2, i1=4, i2=6, i3=8, i4=10, i5=12, i6=14, i7=16, i8=18, i9=20\\).*\#3  <function called from gdb>.*\#4  add \\(a=4, b=5\\).*\#5  <function called from gdb>.*\#6  add \\(a=2, b=3\\).*\#7  <function called from gdb>.*\#8  main.*" \	"backtrace at nested call level 4"gdb_test "finish" "Value returned is .* = 100" \	"Finish from nested call level 4"gdb_test "backtrace" \	"\#0  sum10 \\(i0=2, i1=4, i2=6, i3=8, i4=10, i5=12, i6=14, i7=16, i8=18, i9=20\\).*\#1  <function called from gdb>.*\#2  add \\(a=4, b=5\\).*\#3  <function called from gdb>.*\#4  add \\(a=2, b=3\\).*\#5  <function called from gdb>.*\#6  main.*" \	"backtrace after finish from nested call level 4"gdb_test "finish" "Value returned is .* = 110" \	"Finish from nested call level 3"gdb_test "backtrace" \	"\#0  add \\(a=4, b=5\\).*\#1  <function called from gdb>.*\#2  add \\(a=2, b=3\\).*\#3  <function called from gdb>.*\#4  main.*" \	"backtrace after finish from nested call level 3"gdb_test "finish" "Value returned is .* = 9" \	"Finish from nested call level 2"gdb_test "backtrace" \	"\#0  add \\(a=2, b=3\\).*\#1  <function called from gdb>.*\#2  main.*" \	"backtrace after finish from nested call level 2"gdb_test "finish" "Value returned is .* = 5" \	"Finish from nested call level 1"gdb_test "backtrace" "\#0  main .*" \	"backtrace after finish from nested call level 1"do_get_all_registersset new_reg_content $all_registers_contentif ![string compare $old_reg_content $new_reg_content] then {    pass "nested call dummies preserve register contents"} else {    fail "nested call dummies preserve register contents"}return 0

⌨️ 快捷键说明

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