 b9a0de3773
			
		
	
	
		b9a0de3773
		
	
	
	
	
		
			
			This script first runs the regular gdb's 'bt' command, and then if we are in a coroutine it prints the coroutines backtraces in the order in which they were called. Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> Message-Id: <20201217155436.927320-3-mlevitsk@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python3
 | |
| #
 | |
| # GDB debugging support
 | |
| #
 | |
| # Copyright 2012 Red Hat, Inc. and/or its affiliates
 | |
| #
 | |
| # Authors:
 | |
| #  Avi Kivity <avi@redhat.com>
 | |
| #
 | |
| # This work is licensed under the terms of the GNU GPL, version 2 or
 | |
| # later.  See the COPYING file in the top-level directory.
 | |
| 
 | |
| # Usage:
 | |
| # At the (gdb) prompt, type "source scripts/qemu-gdb.py".
 | |
| # "help qemu" should then list the supported QEMU debug support commands.
 | |
| 
 | |
| import gdb
 | |
| 
 | |
| import os, sys
 | |
| 
 | |
| # Annoyingly, gdb doesn't put the directory of scripts onto the
 | |
| # module search path. Do it manually.
 | |
| 
 | |
| sys.path.append(os.path.dirname(__file__))
 | |
| 
 | |
| from qemugdb import aio, mtree, coroutine, tcg, timers
 | |
| 
 | |
| class QemuCommand(gdb.Command):
 | |
|     '''Prefix for QEMU debug support commands'''
 | |
|     def __init__(self):
 | |
|         gdb.Command.__init__(self, 'qemu', gdb.COMMAND_DATA,
 | |
|                              gdb.COMPLETE_NONE, True)
 | |
| 
 | |
| QemuCommand()
 | |
| coroutine.CoroutineCommand()
 | |
| mtree.MtreeCommand()
 | |
| aio.HandlersCommand()
 | |
| tcg.TCGLockStatusCommand()
 | |
| timers.TimersCommand()
 | |
| 
 | |
| coroutine.CoroutineSPFunction()
 | |
| coroutine.CoroutinePCFunction()
 | |
| coroutine.CoroutineBt()
 | |
| 
 | |
| # Default to silently passing through SIGUSR1, because QEMU sends it
 | |
| # to itself a lot.
 | |
| gdb.execute('handle SIGUSR1 pass noprint nostop')
 |