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

📄 thread_events.exp

📁 gdb-6.8 Linux下的调试程序 最新版本
💻 EXP
字号:
# Copyright (C) 2007 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/>.# Please email any bugs, comments, and/or additions to this file to:# bug-gdb@prep.ai.mit.edu# This file was written by Chris Demetriou (cgd@google.com).# It tests printing of thread event (start, exit) information, and# disabling of those messages.## Note: the format of thread event messages (and also whether or not# messages are printed and can be disabled) is dependent on the target# thread support code.# This test has only been verified with Linux targets, and would need# to be generalized to support other targetsif ![istarget *-*-linux*] then {    return}# When using gdbserver, even on Linux, we don't get notifications# about new threads.  This is expected, so don't test for that.if [is_remote target] then {    return}if $tracelevel then {        strace $tracelevel}set prms_id 0set bug_id 0set testfile "thread_events"set srcfile ${testfile}.cset binfile ${objdir}/${subdir}/${testfile}if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {    return -1}proc gdb_test_thread_start {messages_enabled command pattern message} {  global gdb_prompt  if { $messages_enabled } {    set events_expected 1  } else {    set events_expected 0  }  set events_seen 0  return [gdb_test_multiple $command $message {    -re "\\\[New Thread \[^\]\]*\\\]\r\n" {      incr events_seen;      exp_continue;    }    -re "\[\r\n\]*($pattern)\[\r\n\]+$gdb_prompt $" {      if { $events_seen != $events_expected } {        fail "$message (saw $events_seen, expected $events_expected)"      } else {        pass "$message"      }    }  }]}proc gdb_test_thread_exit {messages_enabled command pattern message} {  global gdb_prompt  if { $messages_enabled } {    set events_expected 1  } else {    set events_expected 0  }  set events_seen 0  return [gdb_test_multiple $command $message {    -re "\\\[Thread \[^\]\]* exited\\\]\r\n" {      incr events_seen      exp_continue;    }    -re "\[\r\n\]*($pattern)\[\r\n\]+$gdb_prompt $" {      if { $events_seen != $events_expected } {        fail "$message (saw $events_seen, expected $events_expected)"      } else {        pass "$message"      }    }  }]}proc test_thread_messages {enabled} {  global srcdir subdir binfile srcfile  if { $enabled } {    set enabled_string "with messages enabled"  } else {    set enabled_string "with messages disabled"  }  gdb_start  gdb_reinitialize_dir $srcdir/$subdir  gdb_load ${binfile}  if { $enabled } {     gdb_test "set print thread-events on"  } else {     gdb_test "set print thread-events off"  }  # The initial thread may log a 'New Thread' message, but we don't  # check for it.  if ![runto_main] then {     fail "Can't run to main $enabled_string"     return 1  }  gdb_test "break threadfunc" \      "Breakpoint.*at.* file .*$srcfile, line.*" \      "breakpoint at threadfunc $enabled_string"  gdb_test "break after_join_func" \      "Breakpoint.*at.* file .*$srcfile, line.*" \      "breakpoint at after_join_func $enabled_string"  # continue to threadfunc breakpoint.  A thread will start.  # Expect to see a thread start message, if messages are enabled.  gdb_test_thread_start $enabled "continue" \       ".*Breakpoint .*,.*threadfunc.*at.*$srcfile:.*" \       "continue to threadfunc $enabled_string"  # continue to after_join_func breakpoint.  A thread will exit.  # Expect to see a thread exit message, if messages are enabled.  gdb_test_thread_exit $enabled "continue" \       ".*Breakpoint .*,.*after_join_func.*at.*$srcfile:.*" \       "continue to after_join_func $enabled_string"  delete_breakpoints  gdb_exit}test_thread_messages 0test_thread_messages 1

⌨️ 快捷键说明

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