Server IP : 127.0.0.2 / Your IP : 3.16.48.163 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/lib/python2.7/dist-packages/bzrlib/ |
Upload File : |
# Copyright (C) 2007, 2009, 2010 Canonical Ltd # # 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA from __future__ import absolute_import import os import signal _breakin_signal_number = None _breakin_signal_name = None def _debug(signal_number, interrupted_frame): import pdb import sys sys.stderr.write("** %s received, entering debugger\n" "** Type 'c' to continue or 'q' to stop the process\n" "** Or %s again to quit (and possibly dump core)\n" % (_breakin_signal_name, _breakin_signal_name)) # It seems that on Windows, when sys.stderr is to a PIPE, then we need to # flush. Not sure why it is buffered, but that seems to be the case. sys.stderr.flush() # restore default meaning so that you can kill the process by hitting it # twice signal.signal(_breakin_signal_number, signal.SIG_DFL) try: pdb.set_trace() finally: signal.signal(_breakin_signal_number, _debug) def determine_signal(): global _breakin_signal_number global _breakin_signal_name if _breakin_signal_number is not None: return _breakin_signal_number # Note: As near as I can tell, Windows is the only one to define SIGBREAK, # and other platforms defined SIGQUIT. There doesn't seem to be a # platform that defines both. # -- jam 2009-07-30 sigquit = getattr(signal, 'SIGQUIT', None) sigbreak = getattr(signal, 'SIGBREAK', None) if sigquit is not None: _breakin_signal_number = sigquit _breakin_signal_name = 'SIGQUIT' elif sigbreak is not None: _breakin_signal_number = sigbreak _breakin_signal_name = 'SIGBREAK' return _breakin_signal_number def hook_debugger_to_signal(): """Add a signal handler so we drop into the debugger. On Unix, this is hooked into SIGQUIT (C-\\), and on Windows, this is hooked into SIGBREAK (C-Pause). """ # when sigquit (C-\) or sigbreak (C-Pause) is received go into pdb if os.environ.get('BZR_SIGQUIT_PDB', '1') == '0': # User explicitly requested we don't support this return sig = determine_signal() if sig is None: return # print 'hooking into %s' % (_breakin_signal_name,) signal.signal(sig, _debug)