mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			260 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			260 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# -*- gdb-script -*-
 | 
						|
# This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
# License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
						|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
						|
 | 
						|
# Interactive commands to help inspecting ActionScript execution state while debugging in gdb.
 | 
						|
#
 | 
						|
# To use this file, type from the gdb prompt: 
 | 
						|
# source $(hg root)/utils/as3.gdbinit
 | 
						|
# or include in your .gdbinit.
 | 
						|
#
 | 
						|
# See gdb help for individual commands.
 | 
						|
#
 | 
						|
# In case of undefined symbols, try running the gdb 'where' command before aswhere.
 | 
						|
#
 | 
						|
# Typical use case:
 | 
						|
# (gdb) run
 | 
						|
# ^C
 | 
						|
# (gdb) where
 | 
						|
# (gdb) aswhere
 | 
						|
# (gdb) asframe 4    # select 4th AS3 frame from the top
 | 
						|
# (gdb) aslocal      # print locals
 | 
						|
# (gdb) aslocal 2    # print 2nd local as a C++ value
 | 
						|
# $42 = ....
 | 
						|
# (gdb) print *$42   # dereference  $42, assuming it's a pointer (to a ScriptObject or String)
 | 
						|
#
 | 
						|
# Note that the gdb scripting language is rather limited.
 | 
						|
#
 | 
						|
 | 
						|
define aswhere
 | 
						|
  set var $fcount = avmplus::AvmCore::getActiveCore()->debugger()->frameCount()
 | 
						|
  set var $i = 0
 | 
						|
  while ($i < $fcount) 
 | 
						|
    #  set var $frame = avmplus::AvmCore::getActiveCore()->debugger()->frameAt($k)
 | 
						|
    #  call (void)avmplus::Debugger::printFrame($k)
 | 
						|
    asprintframe $i
 | 
						|
    set var $i = $i + 1
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
document aswhere
 | 
						|
Print backtrace of all the ActionScript stack frames.
 | 
						|
May not work in all contexts (notably inside MMgc).
 | 
						|
May not work properly until gdb 'where' is called at least once.
 | 
						|
end
 | 
						|
 | 
						|
set var $_asframe_selected=-1
 | 
						|
 | 
						|
define asprintframe 
 | 
						|
  set var $frame = avmplus::AvmCore::getActiveCore()->debugger()->frameAt($arg0)
 | 
						|
  if ($frame == 0)
 | 
						|
    echo no frame\n
 | 
						|
  else
 | 
						|
    aspstring avmplus::Debugger::methodNameAt($frame)
 | 
						|
    echo (
 | 
						|
    set var $vcount = avmplus::Debugger::autoVarCount($frame, avmplus::Debugger::AUTO_ARGUMENT)
 | 
						|
    set var $j = 0
 | 
						|
    while ($j < $vcount) 
 | 
						|
      set var $argname = avmplus::Debugger::autoVarName($frame, $j, avmplus::Debugger::AUTO_ARGUMENT)
 | 
						|
      aspstring $argname 
 | 
						|
      echo =
 | 
						|
      set var $_atom = avmplus::Debugger::autoAtomAt($frame, $j, avmplus::Debugger::AUTO_ARGUMENT)
 | 
						|
      call (void)avmplus::Debugger::printAtom($_atom)
 | 
						|
      set var $j = $j + 1
 | 
						|
      if ($j != $vcount) 
 | 
						|
        echo ,
 | 
						|
      end
 | 
						|
    end
 | 
						|
    echo )
 | 
						|
    echo \n
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
define asframe 
 | 
						|
  if ($argc != 0)
 | 
						|
    set var $_asframe_selected=$arg0
 | 
						|
  end
 | 
						|
  if ($_asframe_selected >= 0)
 | 
						|
    asprintframe $_asframe_selected
 | 
						|
  else
 | 
						|
    echo no frame\n
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
document asframe
 | 
						|
Select and print an ActionScript stack frame.
 | 
						|
With no argument, print the selected AS stack frame.
 | 
						|
An argument specifies the number of the stack frame to select.
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
define aspstring
 | 
						|
  call (void)avmplus::Debugger::printString($arg0)
 | 
						|
end
 | 
						|
 | 
						|
document aspstring
 | 
						|
Print the AS3 string.
 | 
						|
end
 | 
						|
 | 
						|
# not pretty, but there's no switch
 | 
						|
define aslocal
 | 
						|
  set var $frame = avmplus::AvmCore::getActiveCore()->debugger()->frameAt($_asframe_selected)
 | 
						|
  if ($frame == 0)
 | 
						|
    echo no frame\n
 | 
						|
  else
 | 
						|
    if $argc == 0
 | 
						|
      set var $lcount = avmplus::Debugger::autoVarCount($frame, avmplus::Debugger::AUTO_LOCAL)
 | 
						|
      set var $k = 0
 | 
						|
      while ($k < $lcount) 
 | 
						|
        set var $lname = avmplus::Debugger::autoVarName($frame, $k, avmplus::Debugger::AUTO_LOCAL)
 | 
						|
        output $k
 | 
						|
        echo :\ \  
 | 
						|
        aspstring $lname
 | 
						|
        echo :\ \ 
 | 
						|
        aslocal $k
 | 
						|
        set var $k = $k + 1
 | 
						|
      end
 | 
						|
    else
 | 
						|
      set var $_last_type=avmplus::Debugger::autoAtomKindAt($frame, $arg0, avmplus::Debugger::AUTO_LOCAL) 
 | 
						|
      if ($_last_type == 0)
 | 
						|
        echo unknown\n
 | 
						|
      end
 | 
						|
      if ($_last_type == 1)
 | 
						|
        call avmplus::Debugger::autoVarAsObject($frame, $arg0, avmplus::Debugger::AUTO_LOCAL) 
 | 
						|
      end
 | 
						|
      if ($_last_type == 2)
 | 
						|
        call avmplus::Debugger::autoVarAsString($frame, $arg0, avmplus::Debugger::AUTO_LOCAL) 
 | 
						|
      end
 | 
						|
      if ($_last_type == 3)
 | 
						|
        ecno namespace (unfinished)\n
 | 
						|
      end
 | 
						|
      if ($_last_type == 4)
 | 
						|
        echo undefined\n
 | 
						|
      end
 | 
						|
      if ($_last_type == 5)
 | 
						|
        call avmplus::Debugger::autoVarAsBoolean($frame, $arg0, avmplus::Debugger::AUTO_LOCAL) 
 | 
						|
      end
 | 
						|
      if ($_last_type == 6)
 | 
						|
        call avmplus::Debugger::autoVarAsInteger($frame, $arg0, avmplus::Debugger::AUTO_LOCAL) 
 | 
						|
      end
 | 
						|
      if ($_last_type == 7)
 | 
						|
        call avmplus::Debugger::autoVarAsDouble($frame, $arg0, avmplus::Debugger::AUTO_LOCAL) 
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
document aslocal 
 | 
						|
Print local variables of the currently selected AS stack frame, if debuging information present.
 | 
						|
Information may be incorrect if not at a debugger safepoint.
 | 
						|
With no argument, print all the local variables.
 | 
						|
With a numeric argument print the specific local variable (gdb will store value in history 
 | 
						|
for further manipulation).
 | 
						|
end
 | 
						|
 | 
						|
define asarg
 | 
						|
  set var $frame = avmplus::AvmCore::getActiveCore()->debugger()->frameAt($_asframe_selected)
 | 
						|
  if ($frame == 0)
 | 
						|
    echo no frame\n
 | 
						|
  else
 | 
						|
    if $argc == 0
 | 
						|
      set var $acount = avmplus::Debugger::autoVarCount($frame, avmplus::Debugger::AUTO_ARGUMENT)
 | 
						|
      set var $k = 0
 | 
						|
      while ($k < $acount) 
 | 
						|
        set var $name = avmplus::Debugger::autoVarName($frame, $k, avmplus::Debugger::AUTO_ARGUMENT)
 | 
						|
        output $k
 | 
						|
        echo :\ \  
 | 
						|
        aspstring $name
 | 
						|
        echo :\ \ 
 | 
						|
        asarg $k
 | 
						|
        set var $k = $k + 1
 | 
						|
      end
 | 
						|
    else
 | 
						|
      set var $_last_type=avmplus::Debugger::autoAtomKindAt($frame, $arg0, avmplus::Debugger::AUTO_ARGUMENT) 
 | 
						|
      if ($_last_type == 0)
 | 
						|
        echo unknown\n
 | 
						|
      end
 | 
						|
      if ($_last_type == 1)
 | 
						|
        print avmplus::Debugger::autoVarAsObject($frame, $arg0, avmplus::Debugger::AUTO_ARGUMENT) 
 | 
						|
      end
 | 
						|
      if ($_last_type == 2)
 | 
						|
        print avmplus::Debugger::autoVarAsString($frame, $arg0, avmplus::Debugger::AUTO_ARGUMENT) 
 | 
						|
      end
 | 
						|
      if ($_last_type == 3)
 | 
						|
        echo namespace (unfinished)\n
 | 
						|
      end
 | 
						|
      if ($_last_type == 4)
 | 
						|
        echo undefined\n
 | 
						|
      end
 | 
						|
      if ($_last_type == 5)
 | 
						|
        print avmplus::Debugger::autoVarAsBoolean($frame, $arg0, avmplus::Debugger::AUTO_ARGUMENT) 
 | 
						|
      end
 | 
						|
      if ($_last_type == 6)
 | 
						|
        print avmplus::Debugger::autoVarAsInteger($frame, $arg0, avmplus::Debugger::AUTO_ARGUMENT) 
 | 
						|
      end
 | 
						|
      if ($_last_type == 7)
 | 
						|
        print avmplus::Debugger::autoVarAsDouble($frame, $arg0, avmplus::Debugger::AUTO_ARGUMENT) 
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
document asarg 
 | 
						|
Print arguments of the currently selected AS stack frame.
 | 
						|
If no debugging information is available, argument names will not be printed.
 | 
						|
With no argument, print all the arguments.
 | 
						|
With a numeric argument print the specific argument (gdb will store value in history 
 | 
						|
for further manipulation).
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
define asthis
 | 
						|
  set var $frame = avmplus::AvmCore::getActiveCore()->debugger()->frameAt($_asframe_selected)
 | 
						|
  if ($frame == 0)
 | 
						|
    echo no frame\n
 | 
						|
  else
 | 
						|
    print avmplus::Debugger::autoVarAsObject($frame, 0, avmplus::Debugger::AUTO_THIS) 
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
document asthis
 | 
						|
Print the receiver of the currently selected frame.
 | 
						|
end
 | 
						|
 | 
						|
define asmixon
 | 
						|
  print avmshell::DebugCLI::debuggerInterruptOnEnter
 | 
						|
  print avmshell::DebugCLI::debuggerInterruptOnEnter = true
 | 
						|
end
 | 
						|
 | 
						|
document asmixon
 | 
						|
  turn on stepping.
 | 
						|
  Execution will return to gdb propmpt after asstep* instructions.
 | 
						|
  Requires debugging symbols in .abcs
 | 
						|
end
 | 
						|
 | 
						|
define asstepout
 | 
						|
  call  avmplus::AvmCore::getActiveCore()->debugger()->stepOut()
 | 
						|
  continue
 | 
						|
  asprintframe 0
 | 
						|
end
 | 
						|
 | 
						|
define asstepinto
 | 
						|
  output avmplus::AvmCore::getActiveCore()->debugger()->stepInto()
 | 
						|
  continue
 | 
						|
  asprintframe 0
 | 
						|
end
 | 
						|
 | 
						|
define asstepover
 | 
						|
  output avmplus::AvmCore::getActiveCore()->debugger()->stepOver()
 | 
						|
  continue
 | 
						|
  asprintframe 0
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
define asprint
 | 
						|
  aspstring $arg0->traits()->name()
 | 
						|
  echo \n
 | 
						|
end
 |