mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +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"]
|
[submodule "vendor/grammars/language-blade"]
|
||||||
path = vendor/grammars/language-blade
|
path = vendor/grammars/language-blade
|
||||||
url = https://github.com/jawee/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
|
- source.bf
|
||||||
vendor/grammars/SublimeClarion/:
|
vendor/grammars/SublimeClarion/:
|
||||||
- source.clarion
|
- source.clarion
|
||||||
|
vendor/grammars/SublimeGDB/:
|
||||||
|
- source.disasm
|
||||||
|
- source.gdb
|
||||||
|
- source.gdb.session
|
||||||
|
- source.gdbregs
|
||||||
vendor/grammars/SublimePapyrus/:
|
vendor/grammars/SublimePapyrus/:
|
||||||
- source.papyrus.skyrim
|
- source.papyrus.skyrim
|
||||||
vendor/grammars/SublimePuppet/:
|
vendor/grammars/SublimePuppet/:
|
||||||
|
|||||||
@@ -1207,6 +1207,14 @@ GCC Machine Description:
|
|||||||
tm_scope: source.lisp
|
tm_scope: source.lisp
|
||||||
ace_mode: lisp
|
ace_mode: lisp
|
||||||
|
|
||||||
|
GDB:
|
||||||
|
type: programming
|
||||||
|
extensions:
|
||||||
|
- .gdb
|
||||||
|
- .gdbinit
|
||||||
|
tm_scope: source.gdb
|
||||||
|
ace_mode: text
|
||||||
|
|
||||||
GDScript:
|
GDScript:
|
||||||
type: programming
|
type: programming
|
||||||
extensions:
|
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