mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-28 17:20:22 +00:00
Support for GDB
This commit is contained in:
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -752,3 +752,6 @@ url = https://github.com/austinwagner/sublime-sourcepawn
|
||||
[submodule "vendor/grammars/language-blade"]
|
||||
path = vendor/grammars/language-blade
|
||||
url = https://github.com/jawee/language-blade
|
||||
[submodule "vendor/grammars/SublimeGDB"]
|
||||
path = vendor/grammars/SublimeGDB
|
||||
url = https://github.com/quarnster/SublimeGDB
|
||||
|
||||
@@ -121,6 +121,11 @@ vendor/grammars/SublimeBrainfuck:
|
||||
- source.bf
|
||||
vendor/grammars/SublimeClarion/:
|
||||
- source.clarion
|
||||
vendor/grammars/SublimeGDB/:
|
||||
- source.disasm
|
||||
- source.gdb
|
||||
- source.gdb.session
|
||||
- source.gdbregs
|
||||
vendor/grammars/SublimePapyrus/:
|
||||
- source.papyrus.skyrim
|
||||
vendor/grammars/SublimePuppet/:
|
||||
|
||||
@@ -1207,6 +1207,14 @@ GCC Machine Description:
|
||||
tm_scope: source.lisp
|
||||
ace_mode: lisp
|
||||
|
||||
GDB:
|
||||
type: programming
|
||||
extensions:
|
||||
- .gdb
|
||||
- .gdbinit
|
||||
tm_scope: source.gdb
|
||||
ace_mode: text
|
||||
|
||||
GDScript:
|
||||
type: programming
|
||||
extensions:
|
||||
|
||||
259
samples/GDB/as3.gdbinit
Normal file
259
samples/GDB/as3.gdbinit
Normal file
@@ -0,0 +1,259 @@
|
||||
# -*- 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
|
||||
36
samples/GDB/gdb_lpc17xx_program.gdb
Normal file
36
samples/GDB/gdb_lpc17xx_program.gdb
Normal file
@@ -0,0 +1,36 @@
|
||||
#
|
||||
# MicropendousX LPC17xx Development Board
|
||||
#
|
||||
# http://www.MicropendousX.org
|
||||
#
|
||||
# Connect to a debugger controlling a LPC17xx
|
||||
# and download firmware.
|
||||
#
|
||||
# Start your OpenOCD gdb server before running
|
||||
# this script with: arm-none-eabi-gdb -x gdb_lpc17xx_program.gdb
|
||||
#
|
||||
# Note the 'monitor' command just passes its
|
||||
# arguments to OpenOCD
|
||||
#
|
||||
# This file is released under the MIT License
|
||||
#
|
||||
|
||||
# Connect to OpenOCD gdb server
|
||||
target remote localhost:3333
|
||||
|
||||
# reset the LPC17xx IC with the OpenOCD reset command
|
||||
monitor reset
|
||||
|
||||
# the following are OpenOCD commands as in OpenOCD_program.script
|
||||
# which will download a hex file into your LPC17xx
|
||||
monitor halt
|
||||
monitor sleep 200
|
||||
monitor wait_halt
|
||||
monitor flash probe 0
|
||||
monitor flash info 0
|
||||
monitor flash write_image erase unlock USBtoSerial.hex
|
||||
monitor sleep 200
|
||||
monitor reset run
|
||||
monitor exit
|
||||
|
||||
quit
|
||||
1
vendor/grammars/SublimeGDB
vendored
Submodule
1
vendor/grammars/SublimeGDB
vendored
Submodule
Submodule vendor/grammars/SublimeGDB added at 0afb64f273
5
vendor/licenses/grammar/SublimeGDB.txt
vendored
Normal file
5
vendor/licenses/grammar/SublimeGDB.txt
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
type: grammar
|
||||
name: SublimeGDB
|
||||
license: other
|
||||
---
|
||||
Reference in New Issue
Block a user