From a021967295057a3ca85e2e268cc9dacf5f45e292 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Thu, 29 Jun 2017 04:52:45 +0200 Subject: [PATCH 01/13] Trying stuff out... Nothing more. --- Moose Development/Moose/Mission.lua | 2 + Moose Development/Moose/Moose.lua | 6 + .../Moose_Dynamic_Loader.lua | 4 +- Moose Mission Setup/Moose.files | 1 + Moose Mission Setup/Moose.lua | 142 ++++++++++-------- Moose Mission Setup/Moose_Create.lua | 2 +- 6 files changed, 88 insertions(+), 69 deletions(-) create mode 100644 Moose Development/Moose/Mission.lua diff --git a/Moose Development/Moose/Mission.lua b/Moose Development/Moose/Mission.lua new file mode 100644 index 000000000..1c6f9f38b --- /dev/null +++ b/Moose Development/Moose/Mission.lua @@ -0,0 +1,2 @@ + +__Moose.Include( __Moose.ProgramPath, 'Mission.lua' ) \ No newline at end of file diff --git a/Moose Development/Moose/Moose.lua b/Moose Development/Moose/Moose.lua index c0484b05f..8f1fa6fcd 100644 --- a/Moose Development/Moose/Moose.lua +++ b/Moose Development/Moose/Moose.lua @@ -11,3 +11,9 @@ _DATABASE = DATABASE:New() -- Core.Database#DATABASE _SETTINGS = SETTINGS:Set() _SETTINGS:SetSystemMenu( nil ) + + +local initconnection = require("debugger") +initconnection( "127.0.0.1", 10000, "dcsserver", nil, nil, "C:\Program Files\Eagle Dynamics\DCS World" ) + +print("hello") diff --git a/Moose Mission Setup/Moose Create Dynamic/Moose_Dynamic_Loader.lua b/Moose Mission Setup/Moose Create Dynamic/Moose_Dynamic_Loader.lua index c0f9b8985..34c2cbc17 100644 --- a/Moose Mission Setup/Moose Create Dynamic/Moose_Dynamic_Loader.lua +++ b/Moose Mission Setup/Moose Create Dynamic/Moose_Dynamic_Loader.lua @@ -3,10 +3,10 @@ local base = _G __Moose = {} -__Moose.Include = function( IncludeFile ) +__Moose.Include = function( LuaPath, IncludeFile ) if not __Moose.Includes[ IncludeFile ] then __Moose.Includes[IncludeFile] = IncludeFile - local f = assert( base.loadfile( __Moose.ProgramPath .. IncludeFile ) ) + local f = assert( base.loadfile( LuaPath .. IncludeFile ) ) if f == nil then error ("Moose: Could not load Moose file " .. IncludeFile ) else diff --git a/Moose Mission Setup/Moose.files b/Moose Mission Setup/Moose.files index e708d9016..ca3b70fc7 100644 --- a/Moose Mission Setup/Moose.files +++ b/Moose Mission Setup/Moose.files @@ -68,3 +68,4 @@ Tasking/Task_A2A.lua Tasking/Task_Cargo.lua Moose.lua +Mission.lua diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index 47947b97d..d31014207 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,14 +1,14 @@ env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20170624_1201' ) +env.info( 'Moose Generation Timestamp: 20170628_1556' ) local base = _G __Moose = {} -__Moose.Include = function( IncludeFile ) +__Moose.Include = function( LuaPath, IncludeFile ) if not __Moose.Includes[ IncludeFile ] then __Moose.Includes[IncludeFile] = IncludeFile - local f = assert( base.loadfile( __Moose.ProgramPath .. IncludeFile ) ) + local f = assert( base.loadfile( LuaPath .. IncludeFile ) ) if f == nil then error ("Moose: Could not load Moose file " .. IncludeFile ) else @@ -21,68 +21,78 @@ end __Moose.ProgramPath = "Scripts/Moose/" __Moose.Includes = {} -__Moose.Include( 'Utilities/Routines.lua' ) -__Moose.Include( 'Utilities/Utils.lua' ) -__Moose.Include( 'Core/Base.lua' ) -__Moose.Include( 'Core/Scheduler.lua' ) -__Moose.Include( 'Core/ScheduleDispatcher.lua' ) -__Moose.Include( 'Core/Event.lua' ) -__Moose.Include( 'Core/Settings.lua' ) -__Moose.Include( 'Core/Menu.lua' ) -__Moose.Include( 'Core/Zone.lua' ) -__Moose.Include( 'Core/Database.lua' ) -__Moose.Include( 'Core/Set.lua' ) -__Moose.Include( 'Core/Point.lua' ) -__Moose.Include( 'Core/Message.lua' ) -__Moose.Include( 'Core/Fsm.lua' ) -__Moose.Include( 'Core/Radio.lua' ) -__Moose.Include( 'Core/SpawnStatic.lua' ) -__Moose.Include( 'Core/Cargo.lua' ) -__Moose.Include( 'Core/Spot.lua' ) -__Moose.Include( 'Wrapper/Object.lua' ) -__Moose.Include( 'Wrapper/Identifiable.lua' ) -__Moose.Include( 'Wrapper/Positionable.lua' ) -__Moose.Include( 'Wrapper/Controllable.lua' ) -__Moose.Include( 'Wrapper/Group.lua' ) -__Moose.Include( 'Wrapper/Unit.lua' ) -__Moose.Include( 'Wrapper/Client.lua' ) -__Moose.Include( 'Wrapper/Static.lua' ) -__Moose.Include( 'Wrapper/Airbase.lua' ) -__Moose.Include( 'Wrapper/Scenery.lua' ) -__Moose.Include( 'Functional/Scoring.lua' ) -__Moose.Include( 'Functional/CleanUp.lua' ) -__Moose.Include( 'Functional/Spawn.lua' ) -__Moose.Include( 'Functional/Movement.lua' ) -__Moose.Include( 'Functional/Sead.lua' ) -__Moose.Include( 'Functional/Escort.lua' ) -__Moose.Include( 'Functional/MissileTrainer.lua' ) -__Moose.Include( 'Functional/AirbasePolice.lua' ) -__Moose.Include( 'Functional/Detection.lua' ) -__Moose.Include( 'Functional/Designate.lua' ) -__Moose.Include( 'AI/AI_Balancer.lua' ) -__Moose.Include( 'AI/AI_A2A.lua' ) -__Moose.Include( 'AI/AI_A2A_Patrol.lua' ) -__Moose.Include( 'AI/AI_A2A_Cap.lua' ) -__Moose.Include( 'AI/AI_A2A_Gci.lua' ) -__Moose.Include( 'AI/AI_A2A_Dispatcher.lua' ) -__Moose.Include( 'AI/AI_Patrol.lua' ) -__Moose.Include( 'AI/AI_Cap.lua' ) -__Moose.Include( 'AI/AI_Cas.lua' ) -__Moose.Include( 'AI/AI_Bai.lua' ) -__Moose.Include( 'AI/AI_Formation.lua' ) -__Moose.Include( 'Actions/Act_Assign.lua' ) -__Moose.Include( 'Actions/Act_Route.lua' ) -__Moose.Include( 'Actions/Act_Account.lua' ) -__Moose.Include( 'Actions/Act_Assist.lua' ) -__Moose.Include( 'Tasking/CommandCenter.lua' ) -__Moose.Include( 'Tasking/Mission.lua' ) -__Moose.Include( 'Tasking/Task.lua' ) -__Moose.Include( 'Tasking/DetectionManager.lua' ) -__Moose.Include( 'Tasking/Task_A2G_Dispatcher.lua' ) -__Moose.Include( 'Tasking/Task_A2G.lua' ) -__Moose.Include( 'Tasking/Task_A2A_Dispatcher.lua' ) -__Moose.Include( 'Tasking/Task_A2A.lua' ) -__Moose.Include( 'Tasking/Task_Cargo.lua' ) -__Moose.Include( 'Moose.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Utilities/Routines.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Utilities/Utils.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Base.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Scheduler.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/ScheduleDispatcher.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Event.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Settings.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Menu.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Zone.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Database.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Set.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Point.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Message.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Fsm.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Radio.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/SpawnStatic.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Cargo.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Spot.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Wrapper/Object.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Wrapper/Identifiable.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Wrapper/Positionable.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Wrapper/Controllable.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Wrapper/Group.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Wrapper/Unit.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Wrapper/Client.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Wrapper/Static.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Wrapper/Airbase.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Wrapper/Scenery.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/Scoring.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/CleanUp.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/Spawn.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/Movement.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/Sead.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/Escort.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/MissileTrainer.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/AirbasePolice.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/Detection.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/Designate.lua' ) +__Moose.Include( __Moose.ProgramPath, 'AI/AI_Balancer.lua' ) +__Moose.Include( __Moose.ProgramPath, 'AI/AI_A2A.lua' ) +__Moose.Include( __Moose.ProgramPath, 'AI/AI_A2A_Patrol.lua' ) +__Moose.Include( __Moose.ProgramPath, 'AI/AI_A2A_Cap.lua' ) +__Moose.Include( __Moose.ProgramPath, 'AI/AI_A2A_Gci.lua' ) +__Moose.Include( __Moose.ProgramPath, 'AI/AI_A2A_Dispatcher.lua' ) +__Moose.Include( __Moose.ProgramPath, 'AI/AI_Patrol.lua' ) +__Moose.Include( __Moose.ProgramPath, 'AI/AI_Cap.lua' ) +__Moose.Include( __Moose.ProgramPath, 'AI/AI_Cas.lua' ) +__Moose.Include( __Moose.ProgramPath, 'AI/AI_Bai.lua' ) +__Moose.Include( __Moose.ProgramPath, 'AI/AI_Formation.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Actions/Act_Assign.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Actions/Act_Route.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Actions/Act_Account.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Actions/Act_Assist.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Tasking/CommandCenter.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Tasking/Mission.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Tasking/Task.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Tasking/DetectionManager.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Tasking/Task_A2G_Dispatcher.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Tasking/Task_A2G.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Tasking/Task_A2A_Dispatcher.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Tasking/Task_A2A.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Tasking/Task_Cargo.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Moose.lua' ) BASE:TraceOnOff( true ) + +local info = debug.getinfo( 1, "S" ) +local source = info.source -- #string +local dir = source:match("^(.*)/") +BASE:E( {"source", source}) +BASE:E( { "dir", dir } ) + +__Moose.MissionPath = dir .. "Mission\\l10n\\DEFAULT\\" + + env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Mission Setup/Moose_Create.lua b/Moose Mission Setup/Moose_Create.lua index be10d3aac..23bf446a0 100644 --- a/Moose Mission Setup/Moose_Create.lua +++ b/Moose Mission Setup/Moose_Create.lua @@ -50,7 +50,7 @@ while( MooseSource ) do local MooseFilePath = MooseDevelopmentPath .. "/" .. MooseSource if MooseDynamicStatic == "D" then print( "Load dynamic: " .. MooseSource ) - MooseFile:write( "__Moose.Include( '" .. MooseSource .. "' )\n" ) + MooseFile:write( "__Moose.Include( __Moose.ProgramPath, '" .. MooseSource .. "' )\n" ) end if MooseDynamicStatic == "S" then print( "Load static: " .. MooseSource ) From 5686f975651ca1c380f9417a814de9ac246b2aa7 Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Sun, 5 Nov 2017 06:12:04 +0100 Subject: [PATCH 02/13] Added the debugger --- Moose Development/Debugger/debugger.lua | 3353 +++++++++++++++++++++++ 1 file changed, 3353 insertions(+) create mode 100644 Moose Development/Debugger/debugger.lua diff --git a/Moose Development/Debugger/debugger.lua b/Moose Development/Debugger/debugger.lua new file mode 100644 index 000000000..430819de3 --- /dev/null +++ b/Moose Development/Debugger/debugger.lua @@ -0,0 +1,3353 @@ +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2012 Sierra Wireless and others. +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- Sierra Wireless - initial API and implementation +------------------------------------------------------------------------------- +-- Debugger using DBGp protocol. +------------------------------------------------------------------------------- +-- The module returns a single init function which takes 7 parameters (IDEHOST, IDEPORT, IDEKEY, TRANSPORT, PLATFORM, WORKINGDIR, NBRETRY). +-- +-- IDEHOST: the host name or the ip address of the DBGP server (so your ide) +-- if HOST is nil, the DBGP_IDEHOST env var is used. +-- if the env var is nil, the default value '127.0.0.1' is used. +-- +-- IDEPORT: the port of the DBGP server (must be configure in the IDE) +-- if PORT is nil, the DBGP_IDEPORT env var is used. +-- if the env var is nil, the default value '10000' is used. +-- +-- IDEIDEKEY: a string which is used as session key +-- if IDEKEY is nil, the DBGP_IDEKEY env var is used. +-- if the env var is nil, the default value 'luaidekey' is used. +-- +-- TRANSPORT: (advanced optional parameter) the module name of which implement the transport interface used to do the connection with the server. +-- by default the debugger use an internal implementation based on luasocket, but if can not use it, you could implement or use another transport layer implementation. +-- if TRANSPORT is nil, the DBGP_TRANSPORT env var is used. +-- if the env var is nil, the default value 'debugger.transport.luasocket' is used : this is the default implementation based on luasocket. +-- +-- PLATFORM: (advanced optional parameter) 'unix' or 'win32' string which define the kind of platform on which the program to debug is executed. +-- by default the debugger will try to guess it and surely success, if for some reasons it fails you could help it by precise the execution platform. +-- if PLATFORM is nil, the DBGP_PLATFORM env var is used. +-- if the env var is nil, the debugger will try to guess it. +-- +-- WORKINGDIR: (advanced optional parameter) the working directory in which the program to debug is executed. +-- by default the debugger will try to guess it and surely success, if for some reasons it fails you could help it by precise the working directory. +-- if WORKINGDIR is nil, the DBGP_WORKINGDIR env var is used. +-- if the env var is nil, the debugger will try to guess it. +-- +-- NBRETRY: (advanced optional parameter) the number of connection retry at start up. +-- if NBRETRY is nil, the DBGP_NBRETRY env var is used. +-- if the env var is nil, the default value is 10. +-- +------------------------------------------------------------------------------- +-- Known Issues: +-- * Functions cannot be created using the debugger and then called in program because their environment is mapped directly to +-- a debugger internal structure which cannot be persisted (i.e. used outside of the debug_hook). +-- * The DLTK client implementation does not handle context for properties. As a workaround, the context is encoded into the +-- fullname attribute of each property and is used likewise in property_get commands. The syntax is "|" +-- * Dynamic code (compiled with load or loadstring) is not handled (the debugger will step over it, like C code) +-- Design notes: +-- * The whole debugger state is kept in a (currently) unique session table in order to ease eventual adaptation to a multi-threaded +-- model, as DBGp needs one connection per thread. +-- * Full names of properties are base64 encoded because they can contain arbitrary data (spaces, escape characters, ...), this makes +-- command parsing munch easier and faster +-- * This debugger supports asynchronous commands: any command can be done at any time, but some of them (continuations) can lead to +-- inconsistent states. In addition, this have a quite big overhead (~66%), if performance is an issue, a custom command to disable +-- async mode could be done. +-- * All commands are implemented in table commands, see this comments on this table to additional details about commands implementation +-- * The environments in which are evaluated user code (property_* and eval commands, conditional breakpoints, ...) is a read/write +-- mapping of the local environment of a given stack level (can be accessed with variable names). See Context for additional details. +-- Context instantiation is pooled inside a debugging loop with ContextManager (each stack level is instantiated only once). +-- * Output redirection is done by redefining print and some values inside the io table. See "Output redirection handling" for details. +-- Todo list: +-- * Override I/O in init function instead of on module loading. +-- * Allow to break programatically (debugger.break()). +-- * Break-on-error feature (break if an error is thrown and there is no pcall in stack to handle it). +-- * Use new 5.2 facilities to provide informations about function (arguments names, vararg, ...) +-- * Allow to see ... content for vararg functions (5.2 only) +-- * Inspect LuaJIT C data (http://lua-users.org/lists/lua-l/2011-02/msg01012.html)-- /!\ This file is auto-generated. Do not alter manually /!\ + +-------------------------------------------------------------------------------- +-- Submodules body +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-- Module debugger.transport.apr +package.preload["debugger.transport.apr"] = function(...) +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2012 Sierra Wireless and others. +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- Sierra Wireless - initial API and implementation +------------------------------------------------------------------------------- +-- Apache Portable Runtime backend for DBGP debugger. +------------------------------------------------------------------------------- + +local apr = require "apr" + +-- base 64 wrapping +function b64_wrap(src) + local t = {} + local b64_src = mime.b64(src) + for i=1, #b64_src, 76 do t[#t+1] = b64_src:sub(i, i+75).."\r\n" end + return table.concat(t) +end + +-- implements a subset of LuaSocket API using APR +local SOCKET_MT = { + connect = function(self, address, port) return self.skt:connect(address, port) end, + receive = function(self, n) return self.skt:read(n) end, -- only numeric read is used + send = function(self, data) return self.skt:write(data) end, + close = function(self) return self.skt:close() end, + settimeout = function(self, sec) + if sec == nil then self.skt:timeout_set(true) + elseif sec == 0 then self.skt:timeout_set(false) + else self.skt:timeout_set(math.floor(sec * 1000000)) end + end +} +SOCKET_MT.__index = SOCKET_MT + +return { + create = function() + local skt, err = apr.socket_create('tcp') + if not skt then return nil, err end + return setmetatable({skt = skt}, SOCKET_MT) + end, + sleep = apr.sleep, -- exact same API as LuaSocket + + -- Base64 related functions + --- Encodes a string into Base64 with line wrapping + -- @param data (string) data to encode + -- @return base64 encoded string + b64 = function(data) + t = {} + local b64_data = apr.base64_encode(data) + for i=1, #b64_data, 76 do t[#t+1] = b64_data:sub(i, i+75).."\r\n" end + return table.concat(t) + end, + + --- Encodes a string into Base64, without any extra parsing (wrapping, ...) + -- @param data (string) data to encode + -- @return decoded string + rawb64 = apr.base64_encode, + + --- Decodes base64 data + -- @param data (string) base64 encoded data + -- @return decoded string + unb64 = apr.base64_decode, +} + +end +-------------------------------------------------------------------------------- +-- End of moduledebugger.transport.apr +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Module debugger.transport.luasocket +package.preload["debugger.transport.luasocket"] = function(...) +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2012 Sierra Wireless and others. +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- Sierra Wireless - initial API and implementation +------------------------------------------------------------------------------- +-- LuaSocket backend for DBGP debugger. +------------------------------------------------------------------------------- + +-- in order to be as lightweight as possible with Luasocket, core API is used +-- directly (to no add yet another layer) + +--FIXME: remove this hack as soon as luasocket officially support 5.2 +if DBGP_CLIENT_LUA_VERSION == "Lua 5.2" then + table.getn = function(t) return t and #t end +end + +local socket = require "socket" +local mime = require "mime" +local ltn12 = require "ltn12" +local reg = debug.getregistry() + + +return { + create = socket.tcp, + sleep = socket.sleep, + + -- Base64 related functions + --- Encodes a string into Base64 with line wrapping + -- @param data (string) data to encode + -- @return base64 encoded string + b64 = function(data) + local filter = ltn12.filter.chain(mime.encode("base64"), mime.wrap("base64")) + local sink, output = ltn12.sink.table() + ltn12.pump.all(ltn12.source.string(data), ltn12.sink.chain(filter, sink)) + return table.concat(output) + end, + + --- Encodes a string into Base64, without any extra parsing (wrapping, ...) + -- @param data (string) data to encode + -- @return decoded string + rawb64 = function(data) + return (mime.b64(data)) -- first result of the low-level function is fine here + end, + + --- Decodes base64 data + -- @param data (string) base64 encoded data + -- @return decoded string + unb64 = function(data) + return (mime.unb64(data)) -- first result of the low-level function is fine here + end, +} + +end +-------------------------------------------------------------------------------- +-- End of moduledebugger.transport.luasocket +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Module debugger.transport.luasocket_sched +package.preload["debugger.transport.luasocket_sched"] = function(...) +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2012 Sierra Wireless and others. +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- Sierra Wireless - initial API and implementation +------------------------------------------------------------------------------- +-- LuaSocket with LuaSched backend for DBGP debugger. +------------------------------------------------------------------------------- + +-- As LuaShed totally hides blocking functions, this module MUST be loaded on the very start of the program +-- (before loading sched) to catch references to blocking functions. + +local socketcore = require"socket.core" +local debug = require "debug" +local reg = debug.getregistry() + +local blockingcreate = socketcore.tcp +local blockingsleep = socketcore.sleep + +local blockingconnect = reg["tcp{master}"].__index.connect +local blockingreceive = reg["tcp{client}"].__index.receive +local blockingsend = reg["tcp{client}"].__index.send +local blockingsettimeout = reg["tcp{master}"].__index.settimeout +local blockingclose = reg["tcp{master}"].__index.close + +-- we cannot set a new metatable directly on socket object, so wrap it into a new table +-- and forward all calls. +local blockingtcp = { + connect = function(self, address, port) return blockingconnect(self.skt, address, port) end, + receive = function(self, n) return blockingreceive(self.skt, n) end, + send = function(self, data) return blockingsend(self.skt, data) end, + settimeout = function(self, sec) return blockingsettimeout(self.skt, sec) end, + close = function(self) return blockingclose(self.skt) end, +} + +blockingtcp.__index = blockingtcp + +local mime = require "mime" +local ltn12 = require "ltn12" + +-- verify that the socket function are the real ones and not sched not blocking versions +assert(debug.getinfo(blockingcreate, "S").what == "C", "The debugger needs the real socket functions !") +-- cleanup the package.loaded table (socket.core adds socket field into it) +package.loaded.socket = nil + +return { + create = function() return setmetatable({ skt = blockingcreate() }, blockingtcp) end, + sleep = blockingsleep, + + -- Base64 related functions + --- Encodes a string into Base64 with line wrapping + -- @param data (string) data to encode + -- @return base64 encoded string + b64 = function(data) + local filter = ltn12.filter.chain(mime.encode("base64"), mime.wrap("base64")) + local sink, output = ltn12.sink.table() + ltn12.pump.all(ltn12.source.string(data), ltn12.sink.chain(filter, sink)) + return table.concat(output) + end, + + --- Encodes a string into Base64, without any extra parsing (wrapping, ...) + -- @param data (string) data to encode + -- @return decoded string + rawb64 = function(data) + return (mime.b64(data)) -- first result of the low-level function is fine here + end, + + --- Decodes base64 data + -- @param data (string) base64 encoded data + -- @return decoded string + unb64 = function(data) + return (mime.unb64(data)) -- first result of the low-level function is fine here + end, +} + +end +-------------------------------------------------------------------------------- +-- End of moduledebugger.transport.luasocket_sched +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Module debugger.commands +package.preload["debugger.commands"] = function(...) +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2012 Sierra Wireless and others. +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- Sierra Wireless - initial API and implementation +------------------------------------------------------------------------------- +-- Commands handlers for DBGp protocol. +------------------------------------------------------------------------------- +-- Debugger command functions. Each function handle a different command. +-- A command function is called with 3 arguments +-- 1. the debug session instance +-- 2. the command arguments as table +-- 3. the command data, if any +-- The result is either : +-- * true (or any value evaluated to true) : the debugger will resume the execution of the application (continuation command) +-- * false : only in async mode, the debugger WILL wait for further commands instead of continuing (typically, break command) +-- * nil/no return : in sync mode, the debugger will wait for another command. In async mode the debugger will continue the execution + +local cowrap, coyield = coroutine.wrap, coroutine.yield +local debug = require "debug" + +local core = require "debugger.core" +local dbgp = require "debugger.dbgp" +local util = require "debugger.util" +local platform = require "debugger.platform" +local introspection = require "debugger.introspection" +local context = require "debugger.context" +local log = util.log + +local M = { } -- command handlers table + +--- Gets the coroutine behind an id +-- Throws errors on unknown identifiers +-- @param coro_id (string or nil) Coroutine identifier or nil (current coroutine) +-- @return Coroutine instance or nil (if coro_id was nil or if coroutine is the current coroutine) +local function get_coroutine(self, coro_id) + if coro_id then + local coro = dbgp.assert(399, core.active_coroutines.from_id[tonumber(coro_id)], "No such coroutine") + dbgp.assert(399, coroutine.status(coro) ~= "dead", "Coroutine is dead") + if coro ~= self.coro[1] then return util.ForeignThread(coro) end + end + return self.coro +end + +M["break"] = function(self, args) + self.state = "break" + -- send response to previous command + core.previous_context_response(self) + -- and then response to break command itself + dbgp.send_xml(self.skt, { tag = "response", attr = { command = "break", transaction_id = args.i, success = 1 } } ) + return false +end + +function M.status(self, args) + dbgp.send_xml(self.skt, { tag = "response", attr = { + command = "status", + reason = "ok", + status = self.state, + transaction_id = args.i } } ) +end + +function M.stop(self, args) + dbgp.send_xml(self.skt, { tag = "response", attr = { + command = "stop", + reason = "ok", + status = "stopped", + transaction_id = args.i } } ) + self.skt:close() + os.exit(1) +end + +function M.feature_get(self, args) + local name = args.n + local response = util.features[name] or (not not M[name]) + dbgp.send_xml(self.skt, { tag = "response", attr = { + command = "feature_get", + feature_name = name, + supported = response and "1" or "0", + transaction_id = args.i }, + tostring(response) } ) +end + +function M.feature_set(self, args) + local name, value = args.n, args.v + local success = pcall(function() util.features[name] = value end) + dbgp.send_xml(self.skt, { tag = "response", attr = { + command = "feature_set", + feature = name, + success = success and 1 or 0, + transaction_id = args.i + } } ) +end + +function M.typemap_get(self, args) + local function gentype(name, type, xsdtype) + return { tag = "map", atts = { name = name, type = type, ["xsi:type"] = xsdtype } } + end + + dbgp.send_xml(self.skt, { tag = "response", attr = { + command = "typemap_get", + transaction_id = args.i, + ["xmlns:xsi"] = "http://www.w3.org/2001/XMLSchema-instance", + ["xmlns:xsd"] = "http://www.w3.org/2001/XMLSchema", + }, + gentype("nil", "null"), + gentype("boolean", "bool", "xsd:boolean"), + gentype("number", "float", "xsd:float"), + gentype("string", "string", "xsd:string"), + gentype("function", "resource"), + gentype("userdata", "resource"), + gentype("thread", "resource"), + gentype("table", "hash"), + gentype("sequence", "array"), -- artificial type to represent sequences (1-n continuous indexes) + gentype("multival", "array"), -- used to represent return values + } ) +end + +function M.run(self) return true end + +function M.step_over(self) + core.events.register("over") + return true +end + +function M.step_out(self) + core.events.register("out") + return true +end + +function M.step_into(self) + core.events.register("into") + return true +end + +function M.eval(self, args, data) + log("DEBUG", "Going to eval "..data) + local result, err, success + local env = self.stack(self.coro, 0) + -- first, try to load as expression + -- DBGp does not support stack level here, see http://bugs.activestate.com/show_bug.cgi?id=81178 + local func, err = util.loadin("return "..data, env) + + -- if it is not an expression, try as statement (assignment, ...) + if not func then + func, err = util.loadin(data, env) + end + + if func then + success, result = pcall(function() return introspection.Multival(func()) end) + if not success then err = result end + end + + local response = { tag = "response", attr = { command = "eval", transaction_id = args.i } } + if not err then + local nresults = result.n + if nresults == 1 then result = result[1] end + + -- store result for further use (property_*) + -- TODO: this could be optimized: this is only used for Expressions view and totally useless for interactive console, + -- so storing result or not could be set by an argument + local idx + if nresults > 0 then + local cache = env[context.Context[-1]] + idx = #cache + 1 + cache[idx] = result + end + + -- As of Lua 5.1, the maximum stack size (and result count) is 8000, this limit is used to fit all results in one page + response[1] = introspection.make_property(-1, result, idx or "", nil, 1, 8000, 0, nil) + response.attr.success = 1 + else + response.attr.success = 0 + response[1] = dbgp.make_error(206, err) + end + dbgp.send_xml(self.skt, response) +end + +function M.breakpoint_set(self, args, data) + if args.o and not core.breakpoints.hit_conditions[args.o] then dbgp.error(200, "Invalid hit_condition operator: "..args.o) end + + local filename, lineno = args.f, tonumber(args.n) + local bp = { + type = args.t, + state = args.s or "enabled", + temporary = args.r == "1", -- "0" or nil makes this property false + hit_count = 0, + filename = filename, + lineno = lineno, + hit_value = tonumber(args.h or 0), + hit_condition = args.o or ">=", + } + + if args.t == "conditional" then + bp.expression = data + -- the expression is compiled only once + bp.condition = dbgp.assert(207, loadstring("return (" .. data .. ")")) + elseif args.t ~= "line" then dbgp.error(201, "BP type " .. args.t .. " not yet supported") end + + local bpid = core.breakpoints.insert(bp) + dbgp.send_xml(self.skt, { tag = "response", attr = { command = "breakpoint_set", transaction_id = args.i, state = bp.state, id = bpid } } ) +end + +function M.breakpoint_get(self, args) + dbgp.send_xml(self.skt, { tag = "response", + attr = { command = "breakpoint_get", transaction_id = args.i }, + dbgp.assert(205, core.breakpoints.get_xml(tonumber(args.d))) }) +end + +function M.breakpoint_list(self, args) + local bps = { tag = "response", attr = { command = "breakpoint_list", transaction_id = args.i } } + for id, bp in pairs(core.breakpoints.get()) do bps[#bps + 1] = core.breakpoints.get_xml(id) end + dbgp.send_xml(self.skt, bps) +end + +function M.breakpoint_update(self, args) + local bp = core.breakpoints.get(tonumber(args.d)) + if not bp then dbgp.error(205, "No such breakpint "..args.d) end + if args.o and not core.breakpoints.hit_conditions[args.o] then dbgp.error(200, "Invalid hit_condition operator: "..args.o) end + + local response = { tag = "response", attr = { command = "breakpoint_update", transaction_id = args.i } } + bp.state = args.s or bp.state + bp.lineno = tonumber(args.n or bp.lineno) + bp.hit_value = tonumber(args.h or bp.hit_value) + bp.hit_condition = args.o or bp.hit_condition + dbgp.send_xml(self.skt, response) +end + +function M.breakpoint_remove(self, args) + local response = { tag = "response", attr = { command = "breakpoint_remove", transaction_id = args.i } } + if not core.breakpoints.remove(tonumber(args.d)) then dbgp.error(205, "No such breakpint "..args.d) end + dbgp.send_xml(self.skt, response) +end + +function M.stack_depth(self, args) + local depth = 0 + local coro = get_coroutine(self, args.o) + for level = 0, math.huge do + local info = coro:getinfo(level, "St") + if not info then break end -- end of stack + depth = depth + 1 + if info.istailcall then depth = depth + 1 end -- a 'fake' level is added in that case + if info.what == "main" then break end -- levels below main chunk are not interesting + end + dbgp.send_xml(self.skt, { tag = "response", attr = { command = "stack_depth", transaction_id = args.i, depth = depth} } ) +end + +function M.stack_get(self, args) -- TODO: dynamic code + -- special URIs to identify unreachable stack levels + local what2uri = { + tail = "tailreturn:/", + C = "ccode:/", + } + +local function make_level(info, level) + local attr = { level = level, where = info.name, type="file" } + local uri = platform.get_uri(info.source) + if uri and info.currentline then -- reachable level + attr.filename = uri + attr.lineno = info.currentline + else + attr.filename = what2uri[info.what] or "unknown:/" + attr.lineno = -1 + end + return { tag = "stack", attr = attr } +end + +local node = { tag = "response", attr = { command = "stack_get", transaction_id = args.i} } +local coro = get_coroutine(self, args.o) + +if args.d then + local stack_level = tonumber(args.d) + node[#node+1] = make_level(coro:getinfo(stack_level, "nSl"), stack_level) +else + for i=0, math.huge do + local info = coro:getinfo(i, "nSlt") + if not info then break end + node[#node+1] = make_level(info, i) + -- add a fake level of stack for tail calls (tells user that the function has not been called directly) + if info.istailcall then + node[#node+1] = { tag = "stack", attr = { level=i, type="file", filename="tailreturn:/", lineno=-1 } } + end + if info.what == "main" then break end -- levels below main chunk are not interesting + end +end + +dbgp.send_xml(self.skt, node) +end + +--- Lists all active coroutines. +-- Returns a list of active coroutines with their id (an arbitrary string) to query stack and properties. The id is +-- guaranteed to be unique and stable for all coroutine life (they can be reused as long as coroutine exists). +-- Others commands such as stack_get or property_* commands takes an additional -o switch to query a particular cOroutine. +-- If the switch is not given, running coroutine will be used. +-- In case of error on coroutines (most likely coroutine not found or dead), an error 399 is thrown. +-- Note there is an important limitation due to Lua 5.1 coroutine implementation: you cannot query main "coroutine" from +-- another one, so main coroutine is not in returned list (this will change with Lua 5.2). +-- +-- This is a non-standard command. The returned XML has the following strucuture: +-- +-- +-- ... +-- +function M.coroutine_list(self, args) + local running = self.coro[1] + local coroutines = { tag = "response", attr = { command = "coroutine_list", transaction_id = args.i } } + -- as any operation on main coroutine will fail, it is not yet listed + -- coroutines[1] = { name = "coroutine", attr = { id = 0, name = "main", running = (running == nil) and "1" or "0" } } + for id, coro in pairs(core.active_coroutines.from_id) do + if id ~= "n" then + coroutines[#coroutines + 1] = { tag = "coroutine", attr = { id = id, name = tostring(coro), running = (coro == running) and "1" or "0" } } + end + end + dbgp.send_xml(self.skt, coroutines) +end + +function M.context_names(self, args) + local coro = get_coroutine(self, args.o) + local level = tonumber(args.d or 0) + local info = coro:getinfo(level, "f") or dbgp.error(301, "No such stack level "..tostring(level)) + + -- All contexts are always passed, even if empty. This is how DLTK expect context, what about others ? + local contexts = { + tag = "response", attr = { command = "context_names", transaction_id = args.i }, + { tag = "context", attr = { name = "Local", id = 0 } }, + { tag = "context", attr = { name = "Upvalue", id = 2 } }, + { tag = "context", attr = { name = "Global", id = 1 } }, + } + + dbgp.send_xml(self.skt, contexts) +end + +function M.context_get(self, args) + local cxt_num = tonumber(args.c or 0) + local cxt_id = context.Context[cxt_num] or dbgp.error(302, "No such context: "..tostring(cxt_num)) + local level = tonumber(args.d or 0) + local coro = get_coroutine(self, args.o) + local cxt = self.stack(coro, level) + + local properties = { tag = "response", attr = { command = "context_get", transaction_id = args.i, context = context} } + -- iteration over global is different (this could be unified in Lua 5.2 thanks to __pairs metamethod) + for name, val in (cxt_num == 1 and next or getmetatable(cxt[cxt_id]).iterator), cxt[cxt_id], nil do + -- the DBGp specification is not clear about the depth of a context_get, but a recursive get could be *really* slow in Lua + properties[#properties + 1] = introspection.make_property(cxt_num, val, name, nil, 0, util.features.max_children, 0, + util.features.max_data, cxt_num ~= 1) + end + + dbgp.send_xml(self.skt, properties) +end + +------------------------------------------------------------------------------- +-- Property_* commands +------------------------------------------------------------------------------- +-- This in the environment in which properties are get or set. +-- It notably contain a collection of proxy table which handle transparentely get/set operations on special fields +-- and the cache of complex keys. +local property_evaluation_environment = { + key_cache = introspection.key_cache, + metatable = setmetatable({ }, { + __index = function(self, tbl) return getmetatable(tbl) end, + __newindex = function(self, tbl, mt) return setmetatable(tbl, mt) end, + }), + environment = util.eval_env, +} +-- to allows to be set as metatable +property_evaluation_environment.__index = property_evaluation_environment + +function M.property_get(self, args) + --TODO BUG ECLIPSE TOOLSLINUX-99 352316 + local cxt_num, name = assert(util.unb64(args.n):match("^(%-?%d+)|(.*)$")) + cxt_num = tonumber(args.c or cxt_num) + local cxt_id = context.Context[cxt_num] or dbgp.error(302, "No such context: "..tostring(cxt_num)) + local level = tonumber(args.d or 0) + local coro = get_coroutine(self, args.o) + local size = tonumber(args.m or util.features.max_data) + if size < 0 then size = nil end -- call from property_value + local page = tonumber(args.p or 0) + local cxt = self.stack(coro, level) + local chunk = dbgp.assert(206, util.loadin("return "..name, property_evaluation_environment)) + local prop = select(2, dbgp.assert(300, pcall(chunk, cxt[cxt_id]))) + local response = introspection.make_property(cxt_num, prop, name, name, util.features.max_depth, util.features.max_children, page, size) + -- make_property is not able to flag special variables as such when they are at root of property + -- special variables queries are in the form "[(...)[a][b]<...>]" + -- TODO: such parsing is far from perfect + if name:match("^[%w_]+%[.-%b[]%]$") == name then response.attr.type = "special" end + dbgp.send_xml(self.skt, { tag = "response", + attr = { command = "property_get", transaction_id = args.i, context = context}, + response } ) +end + +function M.property_value(self, args) + args.m = -1 + M.property_get(self, args) +end + +function M.property_set(self, args, data) + local cxt_num, name = assert(util.unb64(args.n):match("^(%-?%d+)|(.*)$")) + cxt_num = tonumber(args.c or cxt_num) + local cxt_id = context.Context[cxt_num] or dbgp.error(302, "No such context: "..tostring(cxt_num)) + local level = tonumber(args.d or 0) + local coro = get_coroutine(self, args.o) + local cxt = self.stack(coro, level) + + -- evaluate the new value in the local context + local value = select(2, dbgp.assert(206, pcall(dbgp.assert(206, util.loadin("return "..data, cxt))))) + + local chunk = dbgp.assert(206, util.loadin(name .. " = value", setmetatable({ value = value }, property_evaluation_environment))) + dbgp.assert(206, pcall(chunk, cxt[cxt_id])) + dbgp.send_xml(self.skt, { tag = "response", attr = { success = 1, transaction_id = args.i } } ) +end + +--TODO dynamic code handling +-- The DBGp specification is not clear about the line number meaning, this implementation is 1-based and numbers are inclusive +function M.source(self, args) + local path + if args.f then + path = platform.get_path(args.f) + else + path = self.coro:getinfo(0, "S").source + assert(path:sub(1,1) == "@") + path = path:sub(2) + end + local file, err = io.open(path) + if not file then dbgp.error(100, err, { success = 0 }) end + -- Try to identify compiled files + if file:read(1) == "\033" then dbgp.error(100, args.f.." is bytecode", { success = 0 }) end + file:seek("set", 0) + + + local srclines = { } + local beginline, endline, currentline = tonumber(args.b or 0), tonumber(args.e or math.huge), 0 + for line in file:lines() do + currentline = currentline + 1 + if currentline >= beginline and currentline <= endline then + srclines[#srclines + 1] = line + elseif currentline >= endline then break end + end + file:close() + srclines[#srclines + 1] = "" -- to add a trailing \n + + dbgp.send_xml(self.skt, { tag = "response", + attr = { command = "source", transaction_id = args.i, success = 1}, + util.b64(table.concat(srclines, "\n")) }) +end + +-- Factory for both stdout and stderr commands, change file descriptor in io +local function output_command_handler_factory(mode) + return function(self, args) + if args.c == "0" then -- disable + io[mode] = io.base[mode] + else + io[mode] = setmetatable({ skt = self.skt, mode = mode }, args.c == "1" and core.copy_output or core.redirect_output) + end + dbgp.send_xml(self.skt, { tag = "response", attr = { command = mode, transaction_id = args.i, success = "1" } } ) + end +end + +M.stdout = output_command_handler_factory("stdout") +M.stderr = output_command_handler_factory("stderr") + + +return M + +end +-------------------------------------------------------------------------------- +-- End of moduledebugger.commands +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Module debugger.context +package.preload["debugger.context"] = function(...) +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2012 Sierra Wireless and others. +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- Sierra Wireless - initial API and implementation +------------------------------------------------------------------------------- +-- Context handling: allows to evaluate code snippets in the context of a function +------------------------------------------------------------------------------- + +local M = { } + +local dbgp = require "debugger.dbgp" +local util = require "debugger.util" + +-- make unique object to access contexts +local LOCAL, UPVAL, GLOBAL, EVAL, STORE, HANDLE = {}, {}, {}, {}, {}, {} + +local getglobals +if DBGP_CLIENT_LUA_VERSION == "Lua 5.1" then + getglobals = function(f) return getfenv(f) end +elseif DBGP_CLIENT_LUA_VERSION == "Lua 5.2" then + getglobals = function(f, cxt) + -- 'global' environment: this is either the local _ENV or upvalue _ENV. A special case happen when a + -- function does not reference any global variable: the upvalue _ENV may not exist at all. In this case, + -- global environment is not relevant so it is fixed to an empty table. Another solution would be to set it + -- to the environment from above stack level but it would require some overhead (especially if multiple + -- levels must be instantiated) + if cxt[LOCAL][STORE]["_ENV"] then return cxt[LOCAL]["_ENV"] + elseif cxt[UPVAL][STORE]["_ENV"] then return cxt[UPVAL]["_ENV"] + else return { } end + end +end + +--- Captures variables for given stack level. The capture contains local, upvalues and global variables. +-- The capture can be seen as a proxy table to the stack level: any value can be queried or set no matter +-- it is a local or an upvalue. +-- The individual local and upvalues context are also available and can be queried and modified with indexed notation too. +-- These objects are NOT persistant and must not be used outside the debugger loop which instanciated them ! +M.Context = { + -- Context identifiers can be accessed by their DBGp context ID + [0] = LOCAL, + [1] = GLOBAL, -- DLTK internal ID for globals is 1 + [2] = UPVAL, + -- EVAL is used to keep results from eval in cache in order to browse or modify them, results are stored as sequence + [-1] = EVAL, + STORE = STORE, + + -- gets a variable by name with correct handling of Lua scope chain + -- the or chain does not work here beacause __index metamethod would raise an error instead of returning nil + __index = function(self, k) + if self[LOCAL][STORE][k] then return self[LOCAL][k] + elseif self[UPVAL][STORE][k] then return self[UPVAL][k] + else return self[GLOBAL][k] end + end, + __newindex = function(self, k, v) + if self[LOCAL][STORE][k] then self[LOCAL][k] = v + elseif self[UPVAL][STORE][k] then self[UPVAL][k] = v + else self[GLOBAL][k] = v end + end, + + -- debug only !! + __tostring = function(self) + local buf = { "Locals: \n" } + for k,v in pairs(self[LOCAL][STORE]) do + buf[#buf+1] = "\t"..tostring(k).."("..tostring(v)..")="..tostring(self[LOCAL][k]).."\n" + end + buf[#buf+1] = "Upvalues: \n" + for k,v in pairs(self[UPVAL][STORE]) do + buf[#buf+1] = "\t"..tostring(k).."("..tostring(v)..")="..tostring(self[UPVAL][k]).."\n" + end + return table.concat(buf) + end, + + LocalContext = { + __index = function(self, k) + local index = self[STORE][k] + if not index then error("The local "..tostring(k).." does not exists.") end + local handle = self[HANDLE] + return select(2, handle.coro:getlocal(handle.level, index)) + end, + __newindex = function(self, k, v) + local index = self[STORE][k] + if index then + local handle = self[HANDLE] + handle.coro:setlocal(handle.level, index, v) + else error("Cannot set local " .. k) end + end, + -- Lua 5.2 ready :) + --__pairs = function(self) return getmetatable(self).iterator, self, nil end, + iterator = function(self, prev) + local key, index = next(self[STORE], prev) + if key then return key, self[key] else return nil end + end, + }, + + UpvalContext = { + __index = function(self, k) + local index = self[STORE][k] + if not index then error("The local "..tostring(k).." does not exitsts.") end + return select(2, debug.getupvalue(self[HANDLE], index)) + end, + __newindex = function(self, k, v) + local index = self[STORE][k] + if index then debug.setupvalue(self[HANDLE], index, v) + else error("Cannot set upvalue " .. k) end + end, + -- Lua 5.2 ready :) + -- __pairs = function(self) return getmetatable(self).iterator, self, nil end, + iterator = function(self, prev) + local key, index = next(self[STORE], prev) + if key then return key, self[key] else return nil end + end, + }, + + --- Context constructor + -- @param coro (util.*Thread instance) coroutine to map to + -- @param level (number) stack level do dump (script stack level) + new = function(cls, coro, level) + local locals, upvalues = {}, {} + if level < 0 then dbgp.error(301, "No such stack level: "..tostring(level)) end + local func = (coro:getinfo(level, "f") or dbgp.error(301, "No such stack level: "..tostring(level))).func + + -- local variables + for i=1, math.huge do + local name, val = coro:getlocal(level, i) + if not name then break + elseif name:sub(1,1) ~= "(" then -- skip internal values + locals[name] = i + end + end + + -- upvalues + for i=1, math.huge do + local name, val = debug.getupvalue(func, i) + if not name then break end + upvalues[name] = i + end + + locals = setmetatable({ [STORE] = locals, [HANDLE] = { level = level, coro = coro } }, cls.LocalContext) + upvalues = setmetatable({ [STORE] = upvalues, [HANDLE] = func }, cls.UpvalContext) + + local result = setmetatable({ [LOCAL] = locals, [UPVAL] = upvalues, [EVAL] = {} }, cls) + rawset(result, GLOBAL, getglobals(func, result)) + return result + end, +} + +--- Handle caching of all instantiated context. +-- Returns a function which takes 2 parameters: thread and stack level and returns the corresponding context. If this +-- context has been already queried there is no new instantiation. A ContextManager is valid only during the debug loop +-- on which it has been instantiated. References to a ContextManager must be lost after the end of debug loop (so +-- threads can be collected). +-- If a context cannot be instantiated, an 301 DBGP error is thrown. +function M.ContextManager() + local cache = { } + return function(thread, level) + -- the real coroutine is used as key (not the wrapped instance as its unicity is not guaranteed) + -- otherwise, true is used to identify current thread (as nil is not a valid table key) + local key = thread[1] or true + local thread_contexts = cache[key] + if not thread_contexts then + thread_contexts = { } + cache[key] = thread_contexts + end + + local context = thread_contexts[level] + if not context then + context = M.Context:new(thread, level) + thread_contexts[level] = context + end + + return context + end +end + +return M + +end +-------------------------------------------------------------------------------- +-- End of moduledebugger.context +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Module debugger.dbgp +package.preload["debugger.dbgp"] = function(...) +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2012 Sierra Wireless and others. +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- Sierra Wireless - initial API and implementation +------------------------------------------------------------------------------- +-- DBGp protocol utility function (parsing, error handling, XML generation). +------------------------------------------------------------------------------- + +local util = require "debugger.util" + +local error, setmetatable, type, pairs, ipairs, tostring, tconcat = + error, setmetatable, type, pairs, ipairs, tostring, table.concat + +local M = { } + +--- Parses the DBGp command arguments and returns it as a Lua table with key/value pairs. +-- For example, the sequence -i 5 -j foo will result in {i=5, j=foo} +-- @param cmd_args (string) sequence of arguments +-- @return table described above +function M.arg_parse(cmd_args) + local args = {} + for arg, val in cmd_args:gmatch("%-(%w) (%S+)") do + args[arg] = val + end + return args +end + +--- Parses a command line +-- @return commande name (string) +-- @retrun arguments (table) +-- @return data (string, optional) +function M.cmd_parse(cmd) + local cmd_name, args, data + if cmd:find("--", 1, true) then -- there is a data part + cmd_name, args, data = cmd:match("^(%S+)%s+(.*)%s+%-%-%s*(.*)$") + data = util.unb64(data) + else + cmd_name, args = cmd:match("^(%S+)%s+(.*)$") + end + return cmd_name, M.arg_parse(args), data +end + +--- Returns the packet read from socket, or nil followed by an error message on errors. +function M.read_packet(skt) + local size = {} + while true do + local byte, err = skt:receive(1) + if not byte then return nil, err end + if byte == "\000" then break end + size[#size+1] = byte + end + return tconcat(size) +end + +M.DBGP_ERR_METATABLE = {} -- unique object used to identify DBGp errors + +--- Throws a correct DBGp error which result in a fine tuned error message to the server. +-- It is intended to be called into a command to make a useful error message, a standard Lua error +-- result in a code 998 error (internal debugger error). +-- @param code numerical error code +-- @param message message string (optional) +-- @param attr extra attributes to add to the response tag (optional) +function M.error(code, message, attr) + error(setmetatable({ code = code, message = message, attr = attr or {} }, M.DBGP_ERR_METATABLE), 2) +end + +--- Like core assert but throws a DBGp error if condition is not met. +-- @param code numerical error code thrown if condition is not met. +-- @param message condition to test +-- @param ... will be used as error message if test fails. +function M.assert(code, success, ...) + if not success then M.error(code, (...)) end + return success, ... +end + +-- ----------------- +-- Outgoing data +-- ----------------- +local xmlattr_specialchars = { ['"'] = """, ["<"] = "<", ["&"] = "&" } +--- Very basic XML generator +-- Generates a XML string from a Lua Object Model (LOM) table. +-- See http://matthewwild.co.uk/projects/luaexpat/lom.html +function M.lom2str(xml) + local pieces = { } -- string buffer + + local function generate(node) + pieces[#pieces + 1] = "<"..node.tag + pieces[#pieces + 1] = " " + -- attribute ordering is not honored here + for attr, val in pairs(node.attr or {}) do + if type(attr) == "string" then + pieces[#pieces + 1] = attr .. '="' .. tostring(val):gsub('["&<]', xmlattr_specialchars) .. '"' + pieces[#pieces + 1] = " " + end + end + pieces[#pieces] = nil -- remove the last separator (useless) + + if node[1] then + pieces[#pieces + 1] = ">" + for _, child in ipairs(node) do + if type(child) == "table" then generate(child) + else pieces[#pieces + 1] = "" end + end + pieces[#pieces + 1] = "" + else + pieces[#pieces + 1] = "/>" + end + end + + generate(xml) + return tconcat(pieces) +end + +function M.send_xml(skt, resp) + if not resp.attr then resp.attr = {} end + resp.attr.xmlns = "urn:debugger_protocol_v1" + + local data = '\n'..M.lom2str(resp) + util.log("DEBUG", "Send " .. data) + skt:send(tostring(#data).."\000"..data.."\000") +end + +--- Return an XML tag describing a debugger error, with an optional message +-- @param code (number) error code (see DBGp specification) +-- @param msg (string, optional) textual description of error +-- @return table, suitable to be converted into XML +function M.make_error(code, msg) + local elem = { tag = "error", attr = { code = code } } + if msg then + elem[1] = { tostring(msg), tag = "message" } + end + return elem +end + +return M + +end +-------------------------------------------------------------------------------- +-- End of moduledebugger.dbgp +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Module debugger.introspection +package.preload["debugger.introspection"] = function(...) +-- ---------------------------------------------------------------------------- +-- Copyright (c) 2011-2012 Sierra Wireless and others. +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- Julien Desgats - initial API and implementation +-- ---------------------------------------------------------------------------- +-- Properties generation. Generate a LOM table with data from introspection. +-- ---------------------------------------------------------------------------- + +local debug = require "debug" +local platform = require "debugger.platform" +local util = require "debugger.util" + +local tostring, type, assert, next, rawget, getmetatable, setmetatable, getfenv, select, coyield, cocreate, costatus, coresume, sformat, tconcat = + tostring, type, assert, next, rawget, getmetatable, setmetatable, getfenv, select, coroutine.yield, coroutine.create, coroutine.status, coroutine.resume, string.format, table.concat + +local MULTIVAL_MT = { __tostring = function() return "" end } +local probes = { } + +-- ---------- -- +-- Public API -- +-- ---------- -- + +--- +-- Introspection logic. This module implements Lua objects introspection and +-- generates a [DBGP](http://xdebug.org/docs-dbgp.php) compatible +-- [LOM](http://matthewwild.co.uk/projects/luaexpat/lom.html) data scructure. +-- @module debugger.introspection +local M = { } + +--- +-- Represent the actual data to send to the debugger. +-- Full XML specification can be found in [DBGP specification](http://xdebug.org/docs-dbgp.php#properties-variables-and-values). +-- Modifying properties after their generation is possible (as actual data serialization/sending is delayed) +-- but should be used with care. The XML structure uses the [LOM](http://matthewwild.co.uk/projects/luaexpat/lom.html) +-- format, refer to these documents to get more informations about fields. +-- +-- In addition to table fields, it has an array part, `[1]` being the string representation (base64 encoded), +-- possibly followed by chlid properties (@{#DBGPProperty} themselves) +-- +-- @field #string tag Always "property" +-- @field #table attr XML attributes, see DBGP specification +-- @type DBGPProperty + +--- +-- Inpectors table, contain all inspector functions. +-- Keys are either type names (`string`, `number`, ...) or metatables +-- that have a custom inspector attached. +-- @field [parent=#debugger.introspection] #table inspectors +M.inspectors = { } + +--- +-- Generate a DBGP property if needed. If data is in data pagination and recursion depth ranges, +-- and send a property to the debugger, otherwise drop current property. +-- @param #string name Property name (displayed in IDE) +-- @param #string typename Type name (displayed in IDE) +-- @param #string repr Value string representation +-- @param #DBGPProperty parent Parent property +-- @param #string fullname Lua expression used to get value back in further calls +-- @return #table description +-- @function [parent=#debugger.introspection] property +M.property = coyield + +--- +-- Adds a probe that will be called for every unknown table/userdata. +-- @param #function probe Inspector function to call. +-- @function [parent=#debugger.introspection] add_probe +M.add_probe = function(probe) probes[#probes + 1] = probe end + +--- +-- Inspects a Lua value by dispatching it to correct inspector. Inspector functions have the same API. +-- @param #string name Property name (will be displayed by IDE) +-- @param value Value to inspect +-- @param #table parent Parent property (LOM table of the ) +-- @param #string fullname Expression used to retrieve `value` for further debugger calls +-- @return #DBGPProperty The inspected value as returned by @{debugger.introspection#debugger.introspection.property}. +-- @return #nil If the value has not been inspected +-- @function [parent=#debugger.introspection] inspect +M.inspect = function(name, value, parent, fullname) + return (M.inspectors[type(value)] or M.inspectors.default)(name, value, parent, fullname) +end + +-- ----------------- -- +-- Utility functions -- +-- ----------------- -- + +local function default_inspector(name, value, parent, fullname) + return M.property(name, type(value), tostring(value), parent, fullname) +end + +-- Inspects types that can have a metatable (table and userdata). Returns +-- 1) generated property +-- 2) boolean indicating whether a custom inspector has been called (in that case, do not process value any further) +local function metatable_inspector(name, value, parent, fullname) + local mt = getmetatable(value) + do + -- find by metatable + local custom = M.inspectors[mt] + if custom then return custom(name, value, parent, fullname), true end + -- or else call probes + for i=1, #probes do + local prop = probes[i](name, value, parent, fullname) + if prop then return prop, true end + end + end + + local prop = default_inspector(name, value, parent, fullname) + if mt and prop then + local mtprop = M.inspect("metatable", mt, prop, "metatable["..prop.attr.fullname.."]") + if mtprop then mtprop.attr.type = "special" end + end + return prop, false +end + +local function fancy_func_repr(f, info) + local args = {} + for i=1, info.nparams do + args[i] = debug.getlocal(f, i) + end + + if info.isvararg then + args[#args+1] = "..." + end + + return "function(" .. tconcat(args, ", ") .. ")" +end + +--- Generate a name siutable for table index syntax +-- @param name Key name +-- @return #string A table index style index +-- @usage generate_printable_key('foo') => '["foo"]' +-- @usage generate_printable_key(12) => '[12]' +-- @usage generate_printable_key({}) => '[table: 0x12345678] +-- @function [parent=#debugger.introspection] generate_printable_key +local function generate_printable_key(name) + return "[" .. (type(name) == "string" and sformat("%q", name) or tostring(name)) .. "]" +end +M.generate_printable_key = generate_printable_key + +-- Used to store complex keys (other than string and number) as they cannot be passed in text +-- For these keys, the resulting expression will not be the key itself but "key_cache[...]" +-- where key_cache must be mapped to this table to resolve key correctly. +M.key_cache = setmetatable({ n=0 }, { __mode = "v" }) + +local function generate_key(name) + local tname = type(name) + if tname == "string" then return sformat("%q", name) + elseif tname == "number" or tname == "boolean" then return tostring(name) + else -- complex key, use key_cache for lookup + local i = M.key_cache.n + M.key_cache[i] = name + M.key_cache.n = i+1 + return "key_cache["..tostring(i).."]" + end +end + +--- Generate a usable fullname for a value. +-- Based on parent fullname and key value, return a valid Lua expression. +-- Key can be any value (as anything can act as table key). If it cannot +-- be serialized (only string, number and boolean can), it will be temporarly +-- stored in an internal cache to be retrieved later. +-- @param #string parent Parent fullname +-- @param key The child key to generate fullname for +-- @return #string A valid fullname expression +-- @function [parent=#debugger.introspection] make_fullname +local function make_fullname(parent, key) + return parent .. "[" .. generate_key(key) .. "]" +end +M.make_fullname = make_fullname + +-- ---------- -- +-- Inspectors -- +-- ---------- -- + +M.inspectors.number = default_inspector +M.inspectors.boolean = default_inspector +M.inspectors["nil"] = default_inspector +M.inspectors.userdata = default_inspector +M.inspectors.thread = default_inspector +M.inspectors.default = default_inspector -- allows 3rd party inspectors to use the default inspector if needed + +M.inspectors.userdata = function(name, value, parent, fullname) + return (metatable_inspector(name, value, parent, fullname)) -- drop second return value +end + +M.inspectors.string = function(name, value, parent, fullname) + -- escape linebreaks as \n and not as \<0x0A> like %q does + return M.property(name, "string", sformat("%q", value):gsub("\\\n", "\\n"), parent, fullname) +end + +M.inspectors["function"] = function(name, value, parent, fullname) + local info = debug.getinfo(value, "nSflu") + local prop + if info.what ~= "C" then + -- try to create a fancy representation if possible + local repr = info.nparams and fancy_func_repr(value, info) or tostring(value) + if info.source:sub(1,1) == "@" then + repr = repr .. "\n" .. platform.get_uri("@" .. info.source) .. "\n" .. tostring(info.linedefined) + end + prop = M.property(name, "function (Lua)", repr, parent, fullname) + else + prop = M.property(name, "function", tostring(value), parent, fullname) + end + if not prop then return nil end + + -- (5.1 only) environment is dumped only if it is different from global environment + -- TODO: this is not a correct behavior: environment should be dumped if is different from current stack level one + local fenv = getfenv and getfenv(value) + if fenv and fenv ~= getfenv(0) then + local fenvprop = M.inspect("environment", fenv, prop, "environment["..prop.attr.fullname.."]") + if fenvprop then fenvprop.attr.type = "special" end + end + + return prop +end + + +M.inspectors.table = function(name, value, parent, fullname) + local prop, iscustom = metatable_inspector(name, value, parent, fullname) + if not prop or iscustom then return prop end + + -- iterate over table values and detect arrays at the same time + -- next is used to circumvent __pairs metamethod in 5.2 + local isarray, i = true, 1 + for k,v in next, value, nil do + M.inspect(generate_printable_key(k), v, prop, make_fullname(fullname, k)) + -- array detection: keys should be accessible by 1..n keys + isarray = isarray and rawget(value, i) ~= nil + i = i + 1 + end + -- empty tables are considered as tables + if isarray and i > 1 then prop.attr.type = "sequence" end + + return prop +end + +M.inspectors[MULTIVAL_MT] = function(name, value, parent, fullname) + if value.n == 1 then + -- return directly the value as result + return M.inspect(name, value[1], parent, fullname) + else + -- wrap values inside a multival container + local prop = M.property(name, "multival", "", parent, fullname) + if not prop then return nil end + for i=1, value.n do + M.inspect(generate_printable_key(i), value[i], prop, fullname .. "[" .. i .. "]") + end + return prop + end +end + +-- ------------ -- +-- Internal API -- +-- ------------ -- + +-- Used to inspect "multival" or "vararg" values. The typical use is to pack function result(s) in a single +-- value to inspect. The Multival instances can be passed to make_property as a single value, they will be +-- correctly reported to debugger +function M.Multival(...) + return setmetatable({ n=select("#", ...), ... }, MULTIVAL_MT) +end + +--- Makes a property form a name/value pair (and fullname). This is an **internal** function, and should not be used by 3rd party inspectors. +-- @param #number cxt_id Context ID in which this value resides (workaround bug 352316) +-- @param value The value to debug +-- @param name The name associated with value, passed through tostring, so it can be anything +-- @param #string fullname A Lua expression to eval to get that property again (if nil, computed automatically) +-- @param #number depth The maximum property depth (recursive calls) +-- @param #number pagesize maximum children to include +-- @param #number page The page to generate (0 based) +-- @param #number size_limit Optional, if set, the maximum size of the string representation (in bytes) +-- @param #boolean safe_name If true, does not encode the name as table key +-- @return #DBGPProperty root property +-- @function [parent=#debugger.introspection] make_property +--TODO BUG ECLIPSE TOOLSLINUX-99 352316 : as a workaround, context is encoded into the fullname property +M.make_property = function(cxt_id, value, name, fullname, depth, pagesize, page, size_limit, safe_name) + fullname = fullname or "(...)[" .. generate_key(name) .. "]" + if not safe_name then name = generate_printable_key(name) end + + local generator = cocreate(function() return M.inspect(name, value, nil, fullname) end) + local propstack = { } + local rootnode + local catchthis = true + local nodestoskip = page * pagesize -- nodes to skip at root level to respect pagination + local fullname_prefix = tostring(cxt_id).."|" + + while true do + local succes, name, datatype, repr, parent, fullname = assert(coresume(generator, catchthis and propstack[#propstack] or nil)) + -- finalize and pop all finished properties + while propstack[#propstack] ~= parent do + local topop = propstack[#propstack] + topop.attr.fullname = util.rawb64(fullname_prefix .. topop.attr.fullname) + propstack[#propstack] = nil + end + if costatus(generator) == "dead" then break end + + local prop = { + tag = "property", + attr = { + children = 0, + pagesize = pagesize, + page = parent and 0 or page, + type = datatype, + name = name, + fullname = fullname, + encoding = "base64", + size = #repr, + }, + util.b64(size_limit and repr:sub(1, size_limit) or repr) + } + + if parent then + parent.attr.children = 1 + parent.attr.numchildren = (parent.attr.numchildren or 0) + 1 + -- take pagination into accont to know if node needs to be catched + catchthis = #parent <= pagesize and #propstack <= depth + if parent == rootnode then + catchthis = catchthis and nodestoskip <= 0 + nodestoskip = nodestoskip - 1 + end + -- add node to tree + if catchthis then + parent[#parent + 1] = prop + propstack[#propstack + 1] = prop + end + else + rootnode = prop + catchthis = true + propstack[#propstack + 1] = prop + end + end + + return rootnode +end + +return M + +end +-------------------------------------------------------------------------------- +-- End of moduledebugger.introspection +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Module debugger.plugins.ffi +package.preload["debugger.plugins.ffi"] = function(...) +------------------------------------------------------------------------------- +-- Copyright (c) 2012-2013 Julien Desgats +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- Julien Desgats - initial API and implementation +------------------------------------------------------------------------------- +-- LuaJIT cdata introspection library. +------------------------------------------------------------------------------- + +-- known issues: +-- * references are de-referenced event if inspect_references is unset +-- * is automatic pointer and reference de-referencing is possible ? +-- (only for first item in case of arrays). Possible leads: +-- http://stackoverflow.com/questions/7134590/how-to-test-if-an-address-is-readable-in-linux-userspace-app +-- http://www.softwareverify.com/blog/?p=319 +-- * when setting a value from Eclipse, the type is sometimes changed (e.g. int => number) + +local introspection = require "debugger.introspection" +local reflect = require "debugger.plugins.ffi.reflect" +local ffi = require "ffi" + +local tostring, tonumber, type, assert, sformat, tconcat = tostring, tonumber, type, assert, string.format, table.concat + +local M = { } + +--- Whether the reference types are inspected. Usually references should be safe (at least a bit +-- safer than pointers) so they are inspected. If a reference points to unsafe memory, the whole +-- program could crash ! +-- If this feature is disabled, deeply nested C types will not be displayed correctly as evaluation +-- has a recursion limit, any further evaluation is done through references. +M.inspect_references = true + +local function make_typename(refct) + local t = refct.what + if t == "int" then + if refct.bool then t = "bool" + else + -- use C99 type notation to give more details about acutal type + t = (refct.unsigned and "uint" or "int") .. tostring(refct.size * 8) .. "_t" + end + elseif t == "float" then + -- assume IEEE754 + if refct.size == 8 then t = "double" + elseif refct.size == 16 then t = "long double" -- not really sure this one is always true + end + elseif t == "struct" or t == "enum" or t == "union" then + t = refct.name and (t .. " " .. refct.name) or ("anonymous "..t) + elseif t == "func" then + t = "function (FFI)" + elseif t == "ptr" then + t = make_typename(refct.element_type) .. "*" + elseif t == "ref" then + t = make_typename(refct.element_type) .. "&" + elseif t == "field" then + return make_typename(refct.type) + elseif t == "bitfield" then + t = (refct.type.unsigned and "unsigned" or "signed") .. ":" .. tostring(refct.size * 8) + refct = refct.type + end + + if refct.const then t = "const " .. t end + if refct.volatile then t = "volatile " .. t end + return t +end + +-- if cdatakind is unknown, this one will be called +local default_inspector = introspection.inspectors.number +local inspect + +-- recursion must be handled with some care: if we call regular introspection.inspect +-- we may create boxed references or Lua native objects which will be inspected as such +-- (leading to wrong type names). +local function recurse(name, value, parent, fullname, refct) + if type(value) == "cdata" then + return inspect(name, value, parent, fullname, refct) + else + local prop = introspection.inspect(name, value, parent, fullname) + if prop then + prop.attr.type = make_typename(refct) + end + return prop + end +end + +-- cdata specific inspectors +local inspectors = { + struct = function(name, value, parent, fullname, refct) + local prop = introspection.property(name, make_typename(refct), tostring(value), parent, fullname) + + -- inspect children, if needed + if prop then + for member in refct:members() do + local mname = member.name + recurse(mname, value[mname], prop, fullname .. sformat('[%q]', mname), member) + end + end + return prop + end, + + array = function(name, value, parent, fullname, refct) + local etype = refct.element_type + -- for VLAs, reflect does not give size + local size = refct.size ~= "none" and refct.size or ffi.sizeof(value) + size = size and (size / etype.size) -- we've got the byte size, not element count + + local typename = make_typename(etype) + local prop = introspection.property(name, typename .. "[" .. (tostring(size) or "") .. "]", tostring(value), parent, fullname) + + if prop and size then + for i=0, size-1 do + local idx = "["..tostring(i).."]" + recurse(idx, value[i], prop, fullname .. idx, etype) + end + end + return prop + end, + + func = function(name, value, parent, fullname, refct) + local args = { } + for arg in refct:arguments() do + args[#args + 1] = make_typename(arg.type) .. " " .. arg.name + end + + if refct.vararg then + args[#args + 1] = "..." + end + + local repr = make_typename(refct.return_type) .. " " .. refct.name .. "(" .. tconcat(args, ", ") .. ")" + return introspection.property(name, make_typename(refct), repr, parent, fullname) + end, + + enum = function(name, value, parent, fullname, refct) + local repr = tonumber(value) + -- try to convert numeric value into enum name + --TODO: is there a faster method to make it ? + for val in refct:values() do + if val.value == repr then + repr = val.name + break + end + end + + return introspection.property(name, make_typename(refct), tostring(repr), parent, fullname) + end, + + ref = function(name, value, parent, fullname, refct) + -- this may be unsafe, see inspect_references setting + local typename = make_typename(refct) + if not M.inspect_references then + return introspection.property(name, typename, tostring(value), parent, fullname) + end + + local prop = recurse(name, value, parent, fullname, refct.element_type) + if prop then + prop.attr.type = typename + end + return prop + end, + + int = function(name, value, parent, fullname, refct) + return introspection.property(name, make_typename(refct), tostring(tonumber(value)), parent, fullname) + end, + + -- pointers are too unsafe, do not inspect them + ptr = function(name, value, parent, fullname, refct) + return introspection.property(name, make_typename(refct), tostring(value), parent, fullname) + end, +} + +inspectors.union = inspectors.struct +inspectors.float = inspectors.int + +-- for struct/union fields, the actual type is nested into the refct +inspectors.field = function(name, value, parent, fullname, refct) + return inspect(name, value, parent, fullname, refct.type) +end +inspectors.bitfield = inspectors.field + +inspect = function(name, value, parent, fullname, refct) + -- inspect only values, not ctypes + --FIXME: this cause references to be dereferenced and crash the process if they are wrong ! + if ffi.typeof(value) ~= value then + refct = refct or reflect.typeof(value) + return (inspectors[refct.what] or default_inspector)(name, value, parent, fullname, refct) + end + + -- return a simple property for ctypes + return introspection.property(name, "ctype", tostring(value), parent, fullname) +end + +introspection.inspectors.cdata = inspect + +return M + +end +-------------------------------------------------------------------------------- +-- End of moduledebugger.plugins.ffi +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Module debugger.plugins.ffi.reflect +package.preload["debugger.plugins.ffi.reflect"] = function(...) +--[[ LuaJIT FFI reflection Library ]]-- +--[[ Copyright (C) 2013 Peter Cawley . All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +--]] +local ffi = require "ffi" +local bit = require "bit" +local reflect = {} + +-- Relevant minimal definitions from lj_ctype.h +ffi.cdef [[ + typedef struct CType { + uint32_t info; + uint32_t size; + uint16_t sib; + uint16_t next; + uint32_t name; + } CType; + + typedef struct CTState { + CType *tab; + uint32_t top; + uint32_t sizetab; + void *L; + void *g; + void *finalizer; + void *miscmap; + } CTState; +]] + +local function gc_str(gcref) -- Convert a GCref (to a GCstr) into a string + if gcref ~= 0 then + local ts = ffi.cast("uint32_t*", gcref) + return ffi.string(ts + 4, ts[3]) +end +end + +local function memptr(gcobj) + return tonumber(tostring(gcobj):match"%x*$", 16) +end + +-- Acquire a pointer to this Lua universe's CTState +local CTState do + local co = coroutine.create(function()end) -- Any live coroutine will do. + local uint32_ptr = ffi.typeof("uint32_t*") + local G = ffi.cast(uint32_ptr, ffi.cast(uint32_ptr, memptr(co))[2]) + -- In global_State, `MRef ctype_state` is immediately before `GCRef gcroot[GCROOT_MAX]`. + -- We first find (an entry in) gcroot by looking for a metamethod name string. + local anchor = ffi.cast("uint32_t", ffi.cast("const char*", "__index")) + local i = 0 + while math.abs(tonumber(G[i] - anchor)) > 64 do + i = i + 1 + end + -- We then work backwards looking for something resembling ctype_state. + repeat + i = i - 1 + CTState = ffi.cast("CTState*", G[i]) + until ffi.cast(uint32_ptr, CTState.g) == G +end + +-- Acquire the CTState's miscmap table as a Lua variable +local miscmap do + local t = {}; t[0] = t + local tvalue = ffi.cast("uint32_t*", memptr(t))[2] + ffi.cast("uint32_t*", tvalue)[ffi.abi"le" and 0 or 1] = ffi.cast("uint32_t", ffi.cast("uintptr_t", CTState.miscmap)) + miscmap = t[0] +end + +-- Information for unpacking a `struct CType`. +-- One table per CT_* constant, containing: +-- * A name for that CT_ +-- * Roles of the cid and size fields. +-- * Whether the sib field is meaningful. +-- * Zero or more applicable boolean flags. +local CTs = {[0] = + {"int", + "", "size", false, + {0x08000000, "bool"}, + {0x04000000, "float", "subwhat"}, + {0x02000000, "const"}, + {0x01000000, "volatile"}, + {0x00800000, "unsigned"}, + {0x00400000, "long"}, + }, + {"struct", + "", "size", true, + {0x02000000, "const"}, + {0x01000000, "volatile"}, + {0x00800000, "union", "subwhat"}, + {0x00100000, "vla"}, + }, + {"ptr", + "element_type", "size", false, + {0x02000000, "const"}, + {0x01000000, "volatile"}, + {0x00800000, "ref", "subwhat"}, + }, + {"array", + "element_type", "size", false, + {0x08000000, "vector"}, + {0x04000000, "complex"}, + {0x02000000, "const"}, + {0x01000000, "volatile"}, + {0x00100000, "vla"}, + }, + {"void", + "", "size", false, + {0x02000000, "const"}, + {0x01000000, "volatile"}, + }, + {"enum", + "type", "size", true, + }, + {"func", + "return_type", "nargs", true, + {0x00800000, "vararg"}, + {0x00400000, "sse_reg_params"}, + }, + {"typedef", -- Not seen + "element_type", "", false, + }, + {"attrib", -- Only seen internally + "type", "value", true, + }, + {"field", + "type", "offset", true, + }, + {"bitfield", + "", "offset", true, + {0x08000000, "bool"}, + {0x02000000, "const"}, + {0x01000000, "volatile"}, + {0x00800000, "unsigned"}, + }, + {"constant", + "type", "value", true, + {0x02000000, "const"}, + }, + {"extern", -- Not seen + "CID", "", true, + }, + {"kw", -- Not seen + "TOK", "size", + }, +} + +-- Set of CType::cid roles which are a CTypeID. +local type_keys = { + element_type = true, + return_type = true, + value_type = true, + type = true, +} + +-- Create a metatable for each CT. +local metatables = { + } +for _, CT in ipairs(CTs) do + local what = CT[1] + local mt = {__index = {}} + metatables[what] = mt +end + +-- Logic for merging an attribute CType onto the annotated CType. +local CTAs = {[0] = + function(a, refct) error("TODO: CTA_NONE") end, + function(a, refct) error("TODO: CTA_QUAL") end, + function(a, refct) + a = 2^a.value + refct.alignment = a + refct.attributes.align = a + end, + function(a, refct) + refct.transparent = true + refct.attributes.subtype = refct.typeid + end, + function(a, refct) refct.sym_name = a.name end, + function(a, refct) error("TODO: CTA_BAD") end, +} + +-- C function calling conventions (CTCC_* constants in lj_refct.h) +local CTCCs = {[0] = + "cdecl", + "thiscall", + "fastcall", + "stdcall", +} + +local function refct_from_id(id) -- refct = refct_from_id(CTypeID) + local ctype = CTState.tab[id] + local CT_code = bit.rshift(ctype.info, 28) + local CT = CTs[CT_code] + local what = CT[1] + local refct = setmetatable({ + what = what, + typeid = id, + name = gc_str(ctype.name), + }, metatables[what]) + + -- Interpret (most of) the CType::info field + for i = 5, #CT do + if bit.band(ctype.info, CT[i][1]) ~= 0 then + if CT[i][3] == "subwhat" then + refct.what = CT[i][2] + else + refct[CT[i][2]] = true + end + end + end + if CT_code <= 5 then + refct.alignment = bit.lshift(1, bit.band(bit.rshift(ctype.info, 16), 15)) + elseif what == "func" then + refct.convention = CTCCs[bit.band(bit.rshift(ctype.info, 16), 3)] + end + + if CT[2] ~= "" then -- Interpret the CType::cid field + local k = CT[2] + local cid = bit.band(ctype.info, 0xffff) + if type_keys[k] then + if cid == 0 then + cid = nil + else + cid = refct_from_id(cid) + end + end + refct[k] = cid + end + + if CT[3] ~= "" then -- Interpret the CType::size field + local k = CT[3] + refct[k] = ctype.size + if k == "size" and bit.bnot(refct[k]) == 0 then + refct[k] = "none" + end + end + + if what == "attrib" then + -- Merge leading attributes onto the type being decorated. + local CTA = CTAs[bit.band(bit.rshift(ctype.info, 16), 0xff)] + if refct.type then + local ct = refct.type + ct.attributes = {} + CTA(refct, ct) + ct.typeid = refct.typeid + refct = ct + else + refct.CTA = CTA + end + elseif what == "bitfield" then + -- Decode extra bitfield fields, and make it look like a normal field. + refct.offset = refct.offset + bit.band(ctype.info, 127) / 8 + refct.size = bit.band(bit.rshift(ctype.info, 8), 127) / 8 + refct.type = { + what = "int", + bool = refct.bool, + const = refct.const, + volatile = refct.volatile, + unsigned = refct.unsigned, + size = bit.band(bit.rshift(ctype.info, 16), 127), + } + refct.bool, refct.const, refct.volatile, refct.unsigned = nil + end + + if CT[4] then -- Merge sibling attributes onto this type. + while ctype.sib ~= 0 do + local entry = CTState.tab[ctype.sib] + if CTs[bit.rshift(entry.info, 28)][1] ~= "attrib" then break end + if bit.band(entry.info, 0xffff) ~= 0 then break end + local sib = refct_from_id(ctype.sib) + sib:CTA(refct) + ctype = entry + end + end + + return refct +end + +local function sib_iter(s, refct) + repeat + local ctype = CTState.tab[refct.typeid] + if ctype.sib == 0 then return end + refct = refct_from_id(ctype.sib) + until refct.what ~= "attrib" -- Pure attribs are skipped. + return refct +end + +local function siblings(refct) + -- Follow to the end of the attrib chain, if any. + while refct.attributes do + refct = refct_from_id(refct.attributes.subtype or CTState.tab[refct.typeid].sib) + end + + return sib_iter, nil, refct +end + +metatables.struct.__index.members = siblings +metatables.func.__index.arguments = siblings +metatables.enum.__index.values = siblings + +local function find_sibling(refct, name) + local num = tonumber(name) + if num then + for sib in siblings(refct) do + if num == 1 then + return sib + end + num = num - 1 + end + else + for sib in siblings(refct) do + if sib.name == name then + return sib + end + end + end +end + +metatables.struct.__index.member = find_sibling +metatables.func.__index.argument = find_sibling +metatables.enum.__index.value = find_sibling + +function reflect.typeof(x) -- refct = reflect.typeof(ct) + return refct_from_id(tonumber(ffi.typeof(x))) +end + +function reflect.getmetatable(x) -- mt = reflect.getmetatable(ct) + return miscmap[-tonumber(ffi.typeof(x))] +end + +return reflect + +end +-------------------------------------------------------------------------------- +-- End of moduledebugger.plugins.ffi.reflect +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Module debugger.platform +package.preload["debugger.platform"] = function(...) +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2012 Sierra Wireless and others. +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- Sierra Wireless - initial API and implementation +------------------------------------------------------------------------------- +-- Platform/OS specific features and path handling. +------------------------------------------------------------------------------- + +local url = require "debugger.url" +local util = require "debugger.util" + +local M = { } + +-- Execution plaform (could be win or unix) +-- Used to manage file path difference between the 2 platform +local platform = nil + +-- keep all computed URIs in cache (as they are quite long to compute) +local uri_cache = { } + +-- parse a normalized path and return a table of each segment +-- you could precise the path seperator. +local function split(path,sep) + local t = {} + for w in path:gmatch("[^"..(sep or "/").."]+")do + table.insert(t, w) + end + return t +end + +--- Returns a RFC2396 compliant URI for given source, or false if the mapping failed +local function get_abs_file_uri (source) + local uri + if source:sub(1,1) == "@" then -- real source file + local sourcepath = source:sub(2) + local normalizedpath = M.normalize(sourcepath) + if not M.is_path_absolute(normalizedpath) then + normalizedpath = M.normalize(M.base_dir .. "/" .. normalizedpath) + end + return M.to_file_uri(normalizedpath) + else -- dynamic code, stripped bytecode, tail return, ... + return false + end +end + +--FIXME: as result is cached, changes in package.path that modify the module name are missed +-- (mostly affect main module when Lua interpreter is launched with an absolute path) +local function get_module_uri (source) + if source:sub(1,1) == "@" then -- real source file + local uri + local sourcepath = source:sub(2) + local normalizedpath = M.normalize(sourcepath) + local luapathtable = split (package.path, ";") + local is_source_absolute = M.is_path_absolute(sourcepath) + -- workarround : Add always the ?.lua entry to support + -- the case where file was loaded by : "lua myfile.lua" + table.insert(luapathtable,"?.lua") + for i,var in ipairs(luapathtable) do + -- avoid relative patterns matching absolute ones (e.g. ?.lua matches anything) + if M.is_path_absolute(var) == is_source_absolute then + local escaped = string.gsub(M.normalize(var),"[%^%$%(%)%%%.%[%]%*%+%-%?]",function(c) return "%"..c end) + local pattern = string.gsub(escaped,"%%%?","(.+)") + local modulename = string.match(normalizedpath,pattern) + if modulename then + modulename = string.gsub(modulename,"/","."); + -- if we find more than 1 possible modulename return the shorter + if not uri or string.len(uri)>string.len(modulename) then + uri = modulename + end + end + end + end + if uri then return "module:///"..uri end + end + return false +end + +function M.get_uri (source) + -- search in cache + local uri = uri_cache[source] + if uri ~= nil then return uri end + + -- not found, create uri + if util.features.uri == "module" then + uri = get_module_uri(source) + if not uri then uri = get_abs_file_uri (source) end + else + uri = get_abs_file_uri (source) + end + + uri_cache[source] = uri + return uri +end + +-- get path file from uri +function M.get_path (uri) + local parsed_path = assert(url.parse(uri)) + if parsed_path.scheme == "file" then + return M.to_path(parsed_path) + else + -- search in cache + -- we should surely calculate it instead of find in cache + for k,v in pairs(uri_cache)do + if v == uri then + assert(k:sub(1,1) == "@") + return k:sub(2) + end + end + end +end + +function M.normalize(path) + local parts = { } + for w in path:gmatch("[^/]+") do + if w == ".." and #parts ~=0 then table.remove(parts) + elseif w ~= "." then table.insert(parts, w) + end + end + return (path:sub(1,1) == "/" and "/" or "") .. table.concat(parts, "/") +end + +function M.init(executionplatform,workingdirectory) + -------------------------- + -- define current platform + -------------------------- + -- check parameter + if executionplatform and executionplatform ~= "unix" and executionplatform ~="win" then + error("Unable to initialize platform module : execution platform should be 'unix' or 'win'.") + end + + -- use parameter as current platform + if executionplatform then + platform = executionplatform + else + --if not define try to guess it. + local function iswindows() + local p = io.popen("echo %os%") + if p then + local result =p:read("*l") + p:close() + return result == "Windows_NT" + end + return false + end + + local status, iswin = pcall(iswindows) + if status and iswin then + platform = "win" + else + platform = "unix" + end + end + + -------------------------- + -- platform dependent function + -------------------------- + if platform == "unix" then + -- The Path separator character + M.path_sep = "/" + + -- TODO the way to get the absolute path can be wrong if the program loads new source files by relative path after a cd. + -- currently, the directory is registered on start, this allows program to load any source file and then change working dir, + -- which is the most common use case. + M.base_dir = workingdirectory or os.getenv("PWD") + + -- convert parsed URL table to file path for the current OS (see url.parse from luasocket) + M.to_file_uri = function (path) return url.build{scheme="file",authority="", path=path} end + + -- return true is the path is absolute + -- the path must be normalized + M.is_path_absolute = function (path) return path:sub(1,1) == "/" end + + -- convert absolute normalized path file to uri + M.to_path = function (parsed_url) return url.unescape(parsed_url.path) end + else + -- Implementations for Windows, see UNIX versions for documentation. + M.path_sep = "\\" + M.is_path_absolute = function (path) return path:match("^%a:/") end + M.to_file_uri = function (path) return url.build{scheme="file",authority="", path="/"..path} end + M.to_path = function (parsed_url) return url.unescape(parsed_url.path):gsub("^/", "") end + + local unixnormalize = M.normalize + M.normalize = function(path) return unixnormalize(path:gsub("\\","/"):lower()) end + + -- determine base dir + local function getworkingdirectory() + local p = io.popen("echo %cd%") + if p then + local res = p:read("*l") + p:close() + return M.normalize(res) + end + end + M.base_dir = workingdirectory or getworkingdirectory() + + end + + if not M.base_dir then error("Unable to determine the working directory.") end +end + +return M + +end +-------------------------------------------------------------------------------- +-- End of moduledebugger.platform +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Module debugger.util +package.preload["debugger.util"] = function(...) +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2012 Sierra Wireless and others. +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- Sierra Wireless - initial API and implementation +------------------------------------------------------------------------------- +-- Utility functions. +------------------------------------------------------------------------------- + +local M = { } + +-- log system +local LEVELS = { ERROR = 0, WARNING = 1, INFO = 2, DETAIL = 3, DEBUG = 4 } +local LOG_LEVEL = LEVELS.WARNING + +-- Debugger features handling. Any feature can be get like any regular table, setting features result in +-- error for unknown or read-only features. +M.features = setmetatable({ }, { + -- functions that format/validate data. If function is not provided, the feature cannot be modified. + validators = { + multiple_sessions = tonumber, + encoding = tostring, + max_children = tonumber, + max_data = tonumber, + max_depth = tonumber, + show_hidden = tonumber, + uri = tostring, + log_level = function(level_name) + -- set numerical index in internal var + LOG_LEVEL = assert(LEVELS[level_name], "No such level") + return level_name -- the displayed level is still the name + end, + }, + __index = { + multiple_sessions = 0, + encoding ="UTF-8", + max_children = 32, + max_data = 0xFFFF, + max_depth = 1, + show_hidden = 1, + uri = "file", + log_level = "WARNING", + -- read only features + language_supports_threads = 0, + language_name = "Lua", + language_version = _VERSION, + protocol_version = 1, + supports_async = 1, + data_encoding = "base64", + breakpoint_languages = "Lua", + breakpoint_types = "line conditional", + }, + __newindex = function(self, k, v) + local mt = getmetatable(self) + local values, validator = mt.__index, mt.validators[k] + if values[k] == nil then error("No such feature " .. tostring(k)) end + if not validator then error("The feature " .. tostring(k) .. " is read-only") end + v = assert(validator(v)) + values[k] = v + end, +}) + +-- Wraps debug function and an attached thread +-- also handle stack & coroutine management differencies between Lua versions +local getinfo, getlocal, setlocal = debug.getinfo, debug.getlocal, debug.setlocal + +-- Foreign thread is used to debug paused thread +local ForeignThreadMT = { + getinfo = function(self, level, what) return getinfo(self[1], level, what) end, + getlocal = function(self, level, idx) return getlocal(self[1], level, idx) end, + setlocal = function(self, level, idx, val) return setlocal(self[1], level, idx, val) end, +} +ForeignThreadMT.__index = ForeignThreadMT +function M.ForeignThread(coro) return setmetatable({ coro }, ForeignThreadMT) end + +-- Current thread is used to debug the thread that caused the hook +-- intended to be used *ONLY* in debug loop (executed in a new thread) +local CurrentThreadMT = { + getinfo = function(self, level, what) return getinfo(self[1], level + 2, what) end, + getlocal = function(self, level, idx) return getlocal(self[1], level + 2, idx) end, + setlocal = function(self, level, idx, val) return setlocal(self[1], level + 2, idx, val) end, +} +CurrentThreadMT.__index = CurrentThreadMT +function M.CurrentThread(coro) return setmetatable({ coro }, CurrentThreadMT) end + + +-- Some version dependant functions +if DBGP_CLIENT_LUA_VERSION == "Lua 5.1" then + local loadstring, getfenv, setfenv, debug_getinfo, MainThread = + loadstring, getfenv, setfenv, debug.getinfo, nil + + -- in 5.1 "t" flag does not exist and trigger an error so remove it from what + CurrentThreadMT.getinfo = function(self, level, what) return getinfo(self[1], level + 2, what:gsub("t", "", 1)) end + ForeignThreadMT.getinfo = function(self, level, what) return getinfo(self[1], level, what:gsub("t", "", 1)) end + + -- when we're forced to start debug loop on top of program stack (when on main coroutine) + -- this requires some hackery to get right stack level + + -- Fallback method to inspect running thread (only for main thread in 5.1 or for conditional breakpoints) + --- Gets a script stack level with additional debugger logic added + -- @param l (number) stack level to get for debugged script (0 based) + -- @return real Lua stack level suitable to be passed through deubg functions + local function get_script_level(l) + local hook = debug.gethook() + for i=2, math.huge do + if assert(debug.getinfo(i, "f")).func == hook then + return i + l -- the script to level is just below, but because of the extra call to this function, the level is ok for callee + end + end + end + + if rawget(_G, "jit") then + MainThread = { + [1] = "main", -- as the raw thread object is used as table keys, provide a replacement. + -- LuaJIT completely eliminates tail calls from stack, so get_script_level retunrs wrong result in this case + getinfo = function(self, level, what) return getinfo(get_script_level(level) - 1, what:gsub("t", "", 1)) end, + getlocal = function(self, level, idx) return getlocal(get_script_level(level) - 1, idx) end, + setlocal = function(self, level, idx, val) return setlocal(get_script_level(level) - 1, idx, val) end, + } + else + MainThread = { + [1] = "main", + getinfo = function(self, level, what) return getinfo(get_script_level(level) , what:gsub("t", "", 1)) end, + getlocal = function(self, level, idx) return getlocal(get_script_level(level), idx) end, + setlocal = function(self, level, idx, val) return setlocal(get_script_level(level), idx, val) end, + } + end + + + + -- If the VM is vanilla Lua 5.1 or LuaJIT 2 without 5.2 compatibility, there is no way to get a reference to + -- the main coroutine, so fall back to direct mode: the debugger loop is started on the top of main thread + -- and the actual level is recomputed each time + local oldCurrentThread = M.CurrentThread + M.CurrentThread = function(coro) return coro and oldCurrentThread(coro) or MainThread end + + -- load a piece of code alog with its environment + function M.loadin(code, env) + local f,err = loadstring(code) + if not f then + return nil, err + else + return f and setfenv(f, env) + end + end + + -- table that maps [gs]et environment to index + M.eval_env = setmetatable({ }, { + __index = function(self, func) return getfenv(func) end, + __newindex = function(self, func, env) return setfenv(func, env) end, + }) +elseif DBGP_CLIENT_LUA_VERSION == "Lua 5.2" then + local load, debug_getinfo = load, debug.getinfo + function M.getinfo(coro, level, what) + if coro then return debug_getinfo(coro, level, what) + else return debug_getinfo(level + 1, what) end + end + + function M.loadin(code, env) return load(code, nil, nil, env) end + + -- no eval_env for 5.2 as functions does not have environments anymore +end + +-- ---------------------------------------------------------------------------- +-- Bare minimal log system. +-- ---------------------------------------------------------------------------- +function M.log(level, msg, ...) + if (LEVELS[level] or -1) > LOG_LEVEL then return end + if select("#", ...) > 0 then msg = msg:format(...) end + io.base.stderr:write(string.format("DEBUGGER\t%s\t%s\n", level, msg)) +end + +return M + +end +-------------------------------------------------------------------------------- +-- End of moduledebugger.util +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +-- Module debugger.url +package.preload["debugger.url"] = function(...) +----------------------------------------------------------------------------- +-- URI parsing, composition and relative URL resolution +-- LuaSocket toolkit. +-- Author: Diego Nehab +-- RCS ID: $Id: url.lua,v 1.38 2006/04/03 04:45:42 diego Exp $ +----------------------------------------------------------------------------- + +----------------------------------------------------------------------------- +-- Declare module +----------------------------------------------------------------------------- +local string = require("string") +local base = _G +local table = require("table") + +local _ENV = { } +if setfenv then setfenv(1, _ENV) end + +----------------------------------------------------------------------------- +-- Module version +----------------------------------------------------------------------------- +_VERSION = "URL 1.0.1" + +----------------------------------------------------------------------------- +-- Encodes a string into its escaped hexadecimal representation +-- Input +-- s: binary string to be encoded +-- Returns +-- escaped representation of string binary +----------------------------------------------------------------------------- +function escape(s) + return string.gsub(s, "([^A-Za-z0-9_])", function(c) + return string.format("%%%02x", string.byte(c)) + end) +end + +----------------------------------------------------------------------------- +-- Protects a path segment, to prevent it from interfering with the +-- url parsing. +-- Input +-- s: binary string to be encoded +-- Returns +-- escaped representation of string binary +----------------------------------------------------------------------------- +local function make_set(t) + local s = {} + for i,v in base.ipairs(t) do + s[t[i]] = 1 + end + return s +end + +-- these are allowed withing a path segment, along with alphanum +-- other characters must be escaped +local segment_set = make_set { + "-", "_", ".", "!", "~", "*", "'", "(", + ")", ":", "@", "&", "=", "+", "$", ",", +} + +local function protect_segment(s) + return string.gsub(s, "([^A-Za-z0-9_])", function (c) + if segment_set[c] then return c + else return string.format("%%%02x", string.byte(c)) end + end) +end + +----------------------------------------------------------------------------- +-- Encodes a string into its escaped hexadecimal representation +-- Input +-- s: binary string to be encoded +-- Returns +-- escaped representation of string binary +----------------------------------------------------------------------------- +function unescape(s) + return string.gsub(s, "%%(%x%x)", function(hex) + return string.char(base.tonumber(hex, 16)) + end) +end + +----------------------------------------------------------------------------- +-- Builds a path from a base path and a relative path +-- Input +-- base_path +-- relative_path +-- Returns +-- corresponding absolute path +----------------------------------------------------------------------------- +local function absolute_path(base_path, relative_path) + if string.sub(relative_path, 1, 1) == "/" then return relative_path end + local path = string.gsub(base_path, "[^/]*$", "") + path = path .. relative_path + path = string.gsub(path, "([^/]*%./)", function (s) + if s ~= "./" then return s else return "" end + end) + path = string.gsub(path, "/%.$", "/") + local reduced + while reduced ~= path do + reduced = path + path = string.gsub(reduced, "([^/]*/%.%./)", function (s) + if s ~= "../../" then return "" else return s end + end) + end + path = string.gsub(reduced, "([^/]*/%.%.)$", function (s) + if s ~= "../.." then return "" else return s end + end) + return path +end + +----------------------------------------------------------------------------- +-- Parses a url and returns a table with all its parts according to RFC 2396 +-- The following grammar describes the names given to the URL parts +-- ::= :///;?# +-- ::= @: +-- ::= [:] +-- :: = {/} +-- Input +-- url: uniform resource locator of request +-- default: table with default values for each field +-- Returns +-- table with the following fields, where RFC naming conventions have +-- been preserved: +-- scheme, authority, userinfo, user, password, host, port, +-- path, params, query, fragment +-- Obs: +-- the leading '/' in {/} is considered part of +----------------------------------------------------------------------------- +function parse(url, default) + -- initialize default parameters + local parsed = {} + for i,v in base.pairs(default or parsed) do parsed[i] = v end + -- empty url is parsed to nil + if not url or url == "" then return nil, "invalid url" end + -- remove whitespace + -- url = string.gsub(url, "%s", "") + -- get fragment + url = string.gsub(url, "#(.*)$", function(f) + parsed.fragment = f + return "" + end) + -- get scheme + url = string.gsub(url, "^([%w][%w%+%-%.]*)%:", + function(s) parsed.scheme = s; return "" end) + -- get authority + url = string.gsub(url, "^//([^/]*)", function(n) + parsed.authority = n + return "" + end) + -- get query stringing + url = string.gsub(url, "%?(.*)", function(q) + parsed.query = q + return "" + end) + -- get params + url = string.gsub(url, "%;(.*)", function(p) + parsed.params = p + return "" + end) + -- path is whatever was left + if url ~= "" then parsed.path = url end + local authority = parsed.authority + if not authority then return parsed end + authority = string.gsub(authority,"^([^@]*)@", + function(u) parsed.userinfo = u; return "" end) + authority = string.gsub(authority, ":([^:]*)$", + function(p) parsed.port = p; return "" end) + if authority ~= "" then parsed.host = authority end + local userinfo = parsed.userinfo + if not userinfo then return parsed end + userinfo = string.gsub(userinfo, ":([^:]*)$", + function(p) parsed.password = p; return "" end) + parsed.user = userinfo + return parsed +end + +----------------------------------------------------------------------------- +-- Rebuilds a parsed URL from its components. +-- Components are protected if any reserved or unallowed characters are found +-- Input +-- parsed: parsed URL, as returned by parse +-- Returns +-- a stringing with the corresponding URL +----------------------------------------------------------------------------- +function build(parsed) + local ppath = parse_path(parsed.path or "") + local url = build_path(ppath) + if parsed.params then url = url .. ";" .. parsed.params end + if parsed.query then url = url .. "?" .. parsed.query end + local authority = parsed.authority + if parsed.host then + authority = parsed.host + if parsed.port then authority = authority .. ":" .. parsed.port end + local userinfo = parsed.userinfo + if parsed.user then + userinfo = parsed.user + if parsed.password then + userinfo = userinfo .. ":" .. parsed.password + end + end + if userinfo then authority = userinfo .. "@" .. authority end + end + if authority then url = "//" .. authority .. url end + if parsed.scheme then url = parsed.scheme .. ":" .. url end + if parsed.fragment then url = url .. "#" .. parsed.fragment end + -- url = string.gsub(url, "%s", "") + return url +end + +----------------------------------------------------------------------------- +-- Builds a absolute URL from a base and a relative URL according to RFC 2396 +-- Input +-- base_url +-- relative_url +-- Returns +-- corresponding absolute url +----------------------------------------------------------------------------- +function absolute(base_url, relative_url) + if base.type(base_url) == "table" then + base_parsed = base_url + base_url = build(base_parsed) + else + base_parsed = parse(base_url) + end + local relative_parsed = parse(relative_url) + if not base_parsed then return relative_url + elseif not relative_parsed then return base_url + elseif relative_parsed.scheme then return relative_url + else + relative_parsed.scheme = base_parsed.scheme + if not relative_parsed.authority then + relative_parsed.authority = base_parsed.authority + if not relative_parsed.path then + relative_parsed.path = base_parsed.path + if not relative_parsed.params then + relative_parsed.params = base_parsed.params + if not relative_parsed.query then + relative_parsed.query = base_parsed.query + end + end + else + relative_parsed.path = absolute_path(base_parsed.path or "", + relative_parsed.path) + end + end + return build(relative_parsed) + end +end + +----------------------------------------------------------------------------- +-- Breaks a path into its segments, unescaping the segments +-- Input +-- path +-- Returns +-- segment: a table with one entry per segment +----------------------------------------------------------------------------- +function parse_path(path) + local parsed = {} + path = path or "" + --path = string.gsub(path, "%s", "") + string.gsub(path, "([^/]+)", function (s) table.insert(parsed, s) end) + for i = 1, #parsed do + parsed[i] = unescape(parsed[i]) + end + if string.sub(path, 1, 1) == "/" then parsed.is_absolute = 1 end + if string.sub(path, -1, -1) == "/" then parsed.is_directory = 1 end + return parsed +end + +----------------------------------------------------------------------------- +-- Builds a path component from its segments, escaping protected characters. +-- Input +-- parsed: path segments +-- unsafe: if true, segments are not protected before path is built +-- Returns +-- path: corresponding path stringing +----------------------------------------------------------------------------- +function build_path(parsed, unsafe) + local path = "" + local n = #parsed + if unsafe then + for i = 1, n-1 do + path = path .. parsed[i] + path = path .. "/" + end + if n > 0 then + path = path .. parsed[n] + if parsed.is_directory then path = path .. "/" end + end + else + for i = 1, n-1 do + path = path .. protect_segment(parsed[i]) + path = path .. "/" + end + if n > 0 then + path = path .. protect_segment(parsed[n]) + if parsed.is_directory then path = path .. "/" end + end + end + if parsed.is_absolute then path = "/" .. path end + return path +end + +return _ENV + +end +-------------------------------------------------------------------------------- +-- End of moduledebugger.url +-------------------------------------------------------------------------------- + + +-------------------------------------------------------------------------------- +-- Main content +-------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- Copyright (c) 2011-2012 Sierra Wireless and others. +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- Sierra Wireless - initial API and implementation +------------------------------------------------------------------------------- + +local DBGP_CLIENT_VERSION = "1.4.0" +DBGP_CLIENT_LUA_VERSION = os.getenv "LUA_VERSION" or _VERSION +if DBGP_CLIENT_LUA_VERSION ~= "Lua 5.1" and DBGP_CLIENT_LUA_VERSION ~= "Lua 5.2" then + print(DBGP_CLIENT_LUA_VERSION .. " is not supported. As fallback, debugger will behave as if it runs on Lua 5.2 vm. You could also try to force it to behave as a Lua 5.1 vm by setting the LUA_VERSION environment variable to 'Lua 5.1'") + DBGP_CLIENT_LUA_VERSION = "Lua 5.2" +end + +local debug = require "debug" + +-- To avoid cyclic dependency, internal state of the debugger that must be accessed +-- elsewhere (in commands most likely) will be stored in a fake module "debugger.core" +local core = { } +package.loaded["debugger.core"] = core + +local util = require "debugger.util" +local platform = require "debugger.platform" +local dbgp = require "debugger.dbgp" +local commands = require "debugger.commands" +local context = require "debugger.context" +local url = require "debugger.url" + +local log = util.log + + +-- TODO complete the stdlib access +local corunning, cocreate, cowrap, coyield, coresume, costatus = coroutine.running, coroutine.create, coroutine.wrap, coroutine.yield, coroutine.resume, coroutine.status + + +-- register the URI of the debugger, to not jump into with redefined function or coroutine bootstrap stuff +local debugger_uri = nil -- set in init function +local transportmodule_uri = nil -- set in init function + +-- will contain the session object, and possibly a list of all sessions if a multi-threaded model is adopted +-- this is only used for async commands. +local active_session = nil + +-- tracks all active coroutines and associate an id to them, the table from_id is the id=>coro mapping, the table from_coro is the reverse +core.active_coroutines = { n = 0, from_id = setmetatable({ }, { __mode = "v" }), from_coro = setmetatable({ }, { __mode = "k" }) } + +-- "BEGIN VERSION DEPENDENT CODE" +local setbpenv -- set environment of a breakpoint (compiled function) +if DBGP_CLIENT_LUA_VERSION == "Lua 5.1" then + local setfenv = setfenv + setbpenv = setfenv +elseif DBGP_CLIENT_LUA_VERSION == "Lua 5.2" then + local setupvalue = debug.setupvalue + -- _ENV is the first upvalue + setbpenv = function(f, t) return setupvalue(f, 1, t) end +end +-- "END VERSION DEPENDENT CODE" + +------------------------------------------------------------------------------- +-- Output redirection handling +------------------------------------------------------------------------------- +-- Override standard output functions & constants to redirect data written to these files to IDE too. +-- This works only for output done in Lua, output written by C extensions is still go to system output file. + +-- references to native values +io.base = { output = io.output, stdin = io.stdin, stdout = io.stdout, stderr = io.stderr } + +function print(...) + local buf = {...} + for i=1, select("#", ...) do + buf[i] = tostring(buf[i]) + end + env.info(table.concat(buf, "\t") .. "\n") +end + +-- Actually change standard output file but still return the "fake" stdout +function io.output(output) + io.base.output(output) + return io.stdout +end + +local dummy = function() end + +-- metatable for redirecting output (not printed at all in actual output) +core.redirect_output = { + write = function(self, ...) + local buf = {...} + for i=1, select("#", ...) do buf[i] = tostring(buf[i]) end + buf = table.concat(buf):gsub("\n", "\r\n") + dbgp.send_xml(self.skt, { tag = "stream", attr = { type=self.mode }, util.b64(buf) } ) + end, + flush = dummy, + close = dummy, + setvbuf = dummy, + seek = dummy +} +core.redirect_output.__index = core.redirect_output + +-- metatable for cloning output (outputs to actual system and send to IDE) +core.copy_output = { + write = function(self, ...) + core.redirect_output.write(self, ...) + io.base[self.mode]:write(...) + end, + flush = function(self, ...) return self.out:flush(...) end, + close = function(self, ...) return self.out:close(...) end, + setvbuf = function(self, ...) return self.out:setvbuf(...) end, + seek = function(self, ...) return self.out:seek(...) end, +} +core.copy_output.__index = core.copy_output + +------------------------------------------------------------------------------- +-- Breakpoint registry +------------------------------------------------------------------------------- +-- Registry of current stack levels of all running threads +local stack_levels = setmetatable( { }, { __mode = "k" } ) + +-- File/line mapping for breakpoints (BP). For a given file/line, a list of BP is associated (DBGp specification section 7.6.1 +-- require that multiple BP at same place must be handled) +-- A BP is a table with all additional properties (type, condition, ...) the id is the string representation of the table. +core.breakpoints = { + -- functions to call to match hit conditions + hit_conditions = { + [">="] = function(value, target) return value >= target end, + ["=="] = function(value, target) return value == target end, + ["%"] = function(value, target) return (value % target) == 0 end, + } +} + +-- tracks events such as step_into or step_over +core.events = { } + +do + local file_mapping = { } + local id_mapping = { } + local waiting_sessions = { } -- sessions that wait for an event (over, into, out) + local step_into = nil -- session that registered a step_into event, if any + local sequence = 0 -- used to generate breakpoint IDs + + --- Inserts a new breakpoint into registry + -- @param bp (table) breakpoint data + -- @param uri (string, optional) Absolute file URI, for line breakpoints + -- @param line (number, optional) Line where breakpoint stops, for line breakpoints + -- @return breakpoint identifier + function core.breakpoints.insert(bp) + local bpid = sequence + sequence = bpid + 1 + bp.id = bpid + -- re-encode the URI to avoid any mismatch (with authority for example) + local uri = url.parse(bp.filename) + bp.filename = url.build{ scheme=uri.scheme, authority="", path=platform.normalize(uri.path)} + + local filereg = file_mapping[bp.filename] + if not filereg then + filereg = { } + file_mapping[bp.filename] = filereg + end + + local linereg = filereg[bp.lineno] + if not linereg then + linereg = {} + filereg[bp.lineno] = linereg + end + + BASE:E( { "Breakpoint", bp } ) + + table.insert(linereg, bp) + + id_mapping[bpid] = bp + return bpid + end + + --- If breakpoint(s) exists for given file/line, uptates breakpoint counters + -- and returns whether a breakpoint has matched (boolean) + function core.breakpoints.at(file, line) + + BASE:E( { "File", file, "Line", line } ) + + local bps = file_mapping[file] and file_mapping[file][line] + if not bps then return nil end + + local do_break = false + for _, bp in pairs(bps) do + if bp.state == "enabled" then + local match = true + if bp.condition then + -- TODO: this is not the optimal solution because Context can be instantiated twice if the breakpoint matches + local cxt = context.Context:new(active_session.coro, 0) + setbpenv(bp.condition, cxt) + local success, result = pcall(bp.condition) + if not success then log("ERROR", "Condition evaluation failed for breakpoint at %s:%d: %s", file, line, result) end + -- debugger always stops if an error occurs + match = (not success) or result + end + if match then + bp.hit_count = bp.hit_count + 1 + if core.breakpoints.hit_conditions[bp.hit_condition](bp.hit_count, bp.hit_value) then + if bp.temporary then + core.breakpoints.remove(bp.id) + end + do_break = true + -- there is no break to handle multiple breakpoints: all hit counts must be updated + end + end + end + end + return do_break + end + + function core.breakpoints.get(id) + if id then return id_mapping[id] + else return id_mapping end + end + + function core.breakpoints.remove(id) + local bp = id_mapping[id] + if bp then + id_mapping[id] = nil + local linereg = file_mapping[bp.filename][bp.lineno] + for i=1, #linereg do + if linereg[i] == bp then + table.remove(linereg, i) + break + end + end + + -- cleanup file_mapping + if not next(linereg) then file_mapping[bp.filename][bp.lineno] = nil end + if not next(file_mapping[bp.filename]) then file_mapping[bp.filename] = nil end + return true + end + return false + end + + --- Returns an XML data structure that describes given breakpoint + -- @param id (number) breakpoint ID + -- @return Table describing a tag or nil followed by an error message + function core.breakpoints.get_xml(id) + local bp = id_mapping[id] + if not bp then return nil, "No such breakpoint: "..tostring(id) end + + local response = { tag = "breakpoint", attr = { } } + for k,v in pairs(bp) do response.attr[k] = v end + if bp.expression then + response[1] = { tag = "expression", bp.expression } + end + + -- internal use only + response.attr.expression = nil + response.attr.condition = nil + response.attr.temporary = nil -- TODO: the specification is not clear whether this should be provided, see other implementations + return response + end + + --- Register an event to be triggered. + -- @param event event name to register (must be "over", "out" or "into") + function core.events.register(event) + local thread = active_session.coro[1] + log("DEBUG", "Registered %s event for %s (%d)", event, tostring(thread), stack_levels[thread]) + if event == "into" then + step_into = true + else + waiting_sessions[thread] = { event, stack_levels[thread] } + end + end + + --- Returns if an event (step into, over, out) is triggered. + -- Does *not* discard events (even if they match) as event must be discarded manually if a breakpoint match before anyway. + -- @return true if an event has matched, false otherwise + function core.events.does_match() + if step_into then return true end + + local thread = active_session.coro[1] + local event = waiting_sessions[thread] + if event then + local event_type, target_level = unpack(event) + local current_level = stack_levels[thread] + + if (event_type == "over" and current_level <= target_level) or -- step over + (event_type == "out" and current_level < target_level) then -- step out + log("DEBUG", "Event %s matched!", event_type) + return true + end + end + return false + end + + --- Discards event for current thread (if any) + function core.events.discard() + waiting_sessions[active_session.coro[1]] = nil + step_into = nil + end +end + +------------------------------------------------------------------------------- +-- Debugger main loop +------------------------------------------------------------------------------- + +--- Send the XML response to the previous continuation command and clear the previous context +function core.previous_context_response(self, reason) + self.previous_context.status = self.state + self.previous_context.reason = reason or "ok" + dbgp.send_xml(self.skt, { tag = "response", attr = self.previous_context } ) + self.previous_context = nil +end + +local function cleanup() + coroutine.resume, coroutine.wrap = coresume, cowrap + for _, coro in pairs(core.active_coroutines.from_id) do + debug.sethook(coro) + end + -- to remove hook on the main coroutine, it must be the current one (otherwise, this is a no-op) and this function + -- have to be called adain later on the main thread to finish cleaup + debug.sethook() + core.active_coroutines.from_id, core.active_coroutines.from_coro = { }, { } +end + +--- This function handles the debugger commands while the execution is paused. This does not use coroutines because there is no +-- way to get main coro in Lua 5.1 (only in 5.2) +local function debugger_loop(self, async_packet) + self.skt:settimeout(nil) -- set socket blocking + + -- in async mode, the debugger does not wait for another command before continuing and does not modify previous_context + local async_mode = async_packet ~= nil + + if self.previous_context and not async_mode then + self.state = "break" + core.previous_context_response(self) + end + self.stack = context.ContextManager(self.coro) -- will be used to mutualize context allocation for each loop + + while true do + -- reads packet + local packet = async_packet or dbgp.read_packet(self.skt) + if not packet then + log("WARNING", "lost debugger connection") + cleanup() + break + end + + async_packet = nil + log("DEBUG", packet) + local cmd, args, data = dbgp.cmd_parse(packet) + + -- FIXME: command such as continuations sent in async mode could lead both engine and IDE in inconsistent state : + -- make a blacklist/whitelist of forbidden or allowed commands in async ? + -- invoke function + local func = commands[cmd] + if func then + local ok, cont = xpcall(function() return func(self, args, data) end, debug.traceback) + if not ok then -- internal exception + local code, msg, attr + if type(cont) == "table" and getmetatable(cont) == dbgp.DBGP_ERR_METATABLE then + code, msg, attr = cont.code, cont.message, cont.attr + else + code, msg, attr = 998, tostring(cont), { } + end + log("ERROR", "Command %s caused: (%d) %s", cmd, code, tostring(msg)) + attr.command, attr.transaction_id = cmd, args.i + dbgp.send_xml(self.skt, { tag = "response", attr = attr, dbgp.make_error(code, msg) } ) + elseif cont then + self.previous_context = { command = cmd, transaction_id = args.i } + break + elseif cont == nil and async_mode then + break + elseif cont == false then -- In case of commands that fully resumes debugger loop, the mode is sync + async_mode = false + end + else + log("Got unknown command: "..cmd) + dbgp.send_xml(self.skt, { tag = "response", attr = { command = cmd, transaction_id = args.i, }, dbgp.make_error(4) } ) + end + end + + self.stack = nil -- free allocated contexts + self.state = "running" + self.skt:settimeout(0) -- reset socket to async +end + +-- Stack handling can be pretty complex sometimes, especially with LuaJIT (as tail-call optimization are +-- more aggressive as stock Lua). So all debugger stuff is done in another coroutine, which leave the program +-- stack in a clean state and allow faster and clearer stack operations (no need to remove all debugger calls +-- from stack for each operation). +-- However, this does not always work with stock Lua 5.1 as the main coroutine cannot be referenced +-- (coroutine.running() return nil). For this particular case, the debugger loop is started on the top of +-- program stack and every stack operation is relative the the hook level (see MainThread in util.lua). +local function line_hook(line) + local do_break, packet = nil, nil + local info = active_session.coro:getinfo(0, "S") + local uri = platform.get_uri(info.source) + --BASE:E( { "Source", info.source, debugger_uri } ) + if uri and uri ~= debugger_uri and uri ~= transportmodule_uri then -- the debugger does not break if the source is not known + do_break = core.breakpoints.at(uri, line) or core.events.does_match() + if do_break then + core.events.discard() + end + + -- check for async commands + if not do_break then + packet = dbgp.read_packet(active_session.skt) + if packet then do_break = true end + end + end + + if do_break then + local success, err = pcall(debugger_loop, active_session, packet) + if not success then log("ERROR", "Error while debug loop: "..err) end + end +end + +local line_hook_coro = cocreate(function(line) + while true do + line_hook(line) + line = coyield() + end +end) + +local function debugger_hook(event, line) + local thread = corunning() or "main" + env.info( "running" ) + if event == "call" then + stack_levels[thread] = stack_levels[thread] + 1 + elseif event == "tail call" then + -- tail calls has no effects on stack handling: it is only used only for step commands but a such even does not + -- interfere with any of them + elseif event == "return" or event == "tail return" then + stack_levels[thread] = stack_levels[thread] - 1 + else -- line event: check for breakpoint + active_session.coro = util.CurrentThread(corunning()) + if active_session.coro[1] == "main" then + line_hook(line) + else + -- run the debugger loop in another thread on the other cases (simplifies stack handling) + assert(coresume(line_hook_coro, line)) + end + active_session.coro = nil + end +end + +if rawget(_G, "jit") then + debugger_hook = function(event, line) + local thread = corunning() or "main" + env.info( "running" ) + if event == "call" then + if debug.getinfo(2, "S").what == "C" then return end + stack_levels[thread] = stack_levels[thread] + 1 + elseif event == "return" or event == "tail return" then + -- Return hooks are not called for tail calls in JIT (but unlike 5.2 there is no way to know whether a call is tail or not). + -- So the only reliable way to know stack depth is to walk it. + local depth = 2 + -- TODO: find the fastest way to call getinfo ('what' parameter) + while debug.getinfo(depth, "f") do depth = depth + 1 end + stack_levels[thread] = depth - 2 + elseif event == "line" then + active_session.coro = util.CurrentThread(corunning()) + if active_session.coro[1] == "main" then + line_hook(line) + else + -- run the debugger loop in another thread on the other cases (simplifies stack handling) + assert(coresume(line_hook_coro, line)) + end + active_session.coro = nil + end + end +end + +local function sendInitPacket(skt,idekey) + -- get the root script path (the highest possible stack index) + local source + for i=2, math.huge do + local info = debug.getinfo(i) + if not info then break end + source = platform.get_uri(info.source) or source + end + if not source then source = "unknown:/" end -- when loaded before actual script (with a command line switch) + + -- generate some kind of thread identifier + local thread = corunning() or "main" + stack_levels[thread] = 1 -- the return event will set the counter to 0 + local sessionid = tostring(os.time()) .. "_" .. tostring(thread) + + dbgp.send_xml(skt, { tag = "init", attr = { + appid = "Lua DBGp", + idekey = idekey, + session = sessionid, + thread = tostring(thread), + parent = "", + language = "Lua", + protocol_version = "1.0", + fileuri = source + } }) + + return sessionid +end + +local function init(host, port, idekey, transport, executionplatform, workingdirectory, nbRetry) + -- get connection data + local host = host or os.getenv "DBGP_IDEHOST" or "127.0.0.1" + local port = port or os.getenv "DBGP_IDEPORT" or "10000" + local idekey = idekey or os.getenv("DBGP_IDEKEY") or "luaidekey" + + -- init plaform module + local executionplatform = executionplatform or os.getenv("DBGP_PLATFORM") or nil + local workingdirectory = workingdirectory or os.getenv("DBGP_WORKINGDIR") or nil + platform.init(executionplatform,workingdirectory) + + -- get transport layer + local transportpath = transport or os.getenv("DBGP_TRANSPORT") or "debugger.transport.luasocket" + local transport = require(transportpath) + + -- nb retry for connection + local nbRetry = nbRetry or os.getenv("DBGP_NBRETRY") or 10 + nbRetry = math.max(nbRetry,1) + + -- install base64 functions into util + util.b64, util.rawb64, util.unb64 = transport.b64, transport.rawb64, transport.unb64 + + -- get the debugger and transport layer URI + debugger_uri = platform.get_uri(debug.getinfo(1).source) + transportmodule_uri = platform.get_uri(debug.getinfo(transport.create).source) + + -- try to connect several times: if IDE launches both process and server at same time, first connect attempts may fail + local skt,ok, err + print(string.format("Debugger v%s", DBGP_CLIENT_VERSION)) + print(string.format("Debugger: Trying to connect to %s:%s ... ", host, port)) + + local timeelapsed = 0 + local sessionid = nil + for i=1,nbRetry do + -- try to connect to DBGP server + skt = assert(transport.create()) + skt:settimeout(nil) + ok, err = skt:connect(host, port) + if ok then + sessionid = sendInitPacket(skt,idekey) + -- test if socket is closed + ok, err = skt:receive(0) + if err == nil then print("Debugger: Connection succeed.") break end + end + + if err ~= nil then + -- failed to connect + print(string.format("Debugger: Failed to connect to %s:%s (%s)", host, port, err)) + skt:close() + + -- wait&retry + local timetowait = math.min(3, math.max(timeelapsed/2, 0.25)) + if i < nbRetry then + print(string.format("Debugger: Retrying to connect to %s:%s in %.2fs ... ", host, port,timetowait)) + transport.sleep(timetowait) + timeelapsed = timeelapsed+timetowait + end + end + end + if err then error(string.format("Cannot connect to %s:%d : %s", host, port, err)) end + + --FIXME util.CurrentThread(corunning) => util.CurrentThread(corunning()) WHAT DOES IT FIXES ?? + local sess = { skt = skt, state = "starting", id = sessionid, coro = util.CurrentThread(corunning) } + active_session = sess + debugger_loop(sess) + + -- set debug hooks + debug.sethook(debugger_hook, "rlc") + + -- install coroutine collecting functions. + -- TODO: maintain a list of *all* coroutines can be overkill (for example, the ones created by copcall), make a extension point to + -- customize debugged coroutines + -- coroutines are referenced during their first resume (so we are sure that they always have a stack frame) + local function resume_handler(coro, ...) + if costatus(coro) == "dead" then + local coro_id = core.active_coroutines.from_coro[coro] + core.active_coroutines.from_id[coro_id] = nil + core.active_coroutines.from_coro[coro] = nil + stack_levels[coro] = nil + end + return ... + end + + function coroutine.resume(coro, ...) + if not stack_levels[coro] then + -- first time referenced + stack_levels[coro] = 0 + core.active_coroutines.n = core.active_coroutines.n + 1 + core.active_coroutines.from_id[core.active_coroutines.n] = coro + core.active_coroutines.from_coro[coro] = core.active_coroutines.n + debug.sethook(coro, debugger_hook, "rlc") + end + return resume_handler(coro, coresume(coro, ...)) + end + + -- coroutine.wrap uses directly C API for coroutines and does not trigger our overridden coroutine.resume + -- so this is an implementation of wrap in pure Lua + local function wrap_handler(status, ...) + if not status then error((...)) end + return ... + end + + function coroutine.wrap(f) + local coro = coroutine.create(f) + return function(...) + return wrap_handler(coroutine.resume(coro, ...)) + end + end + + return sess +end + +return init From 73a1c565325a10d67f0771d8abbe22c639faacfe Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Sun, 5 Nov 2017 06:15:06 +0100 Subject: [PATCH 03/13] New dynamic loader --- Moose Mission Setup/Moose.lua | 27 +++--- Moose Mission Setup/Moose_.lua | 153 +++++++++++++++++---------------- 2 files changed, 91 insertions(+), 89 deletions(-) diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index d31014207..239bba24b 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20170628_1556' ) +env.info( 'Moose Generation Timestamp: 20171105_0612' ) local base = _G @@ -24,6 +24,9 @@ __Moose.Includes = {} __Moose.Include( __Moose.ProgramPath, 'Utilities/Routines.lua' ) __Moose.Include( __Moose.ProgramPath, 'Utilities/Utils.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/Base.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/UserFlag.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/UserSound.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Report.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/Scheduler.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/ScheduleDispatcher.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/Event.lua' ) @@ -33,10 +36,13 @@ __Moose.Include( __Moose.ProgramPath, 'Core/Zone.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/Database.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/Set.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/Point.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Velocity.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/Message.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/Fsm.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/Radio.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Spawn.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/SpawnStatic.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Core/Goal.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/Cargo.lua' ) __Moose.Include( __Moose.ProgramPath, 'Core/Spot.lua' ) __Moose.Include( __Moose.ProgramPath, 'Wrapper/Object.lua' ) @@ -51,14 +57,17 @@ __Moose.Include( __Moose.ProgramPath, 'Wrapper/Airbase.lua' ) __Moose.Include( __Moose.ProgramPath, 'Wrapper/Scenery.lua' ) __Moose.Include( __Moose.ProgramPath, 'Functional/Scoring.lua' ) __Moose.Include( __Moose.ProgramPath, 'Functional/CleanUp.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/Spawn.lua' ) __Moose.Include( __Moose.ProgramPath, 'Functional/Movement.lua' ) __Moose.Include( __Moose.ProgramPath, 'Functional/Sead.lua' ) __Moose.Include( __Moose.ProgramPath, 'Functional/Escort.lua' ) __Moose.Include( __Moose.ProgramPath, 'Functional/MissileTrainer.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/AirbasePolice.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/ATC_Ground.lua' ) __Moose.Include( __Moose.ProgramPath, 'Functional/Detection.lua' ) __Moose.Include( __Moose.ProgramPath, 'Functional/Designate.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/RAT.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/ZoneGoal.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/ZoneGoalCoalition.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Functional/ZoneCaptureCoalition.lua' ) __Moose.Include( __Moose.ProgramPath, 'AI/AI_Balancer.lua' ) __Moose.Include( __Moose.ProgramPath, 'AI/AI_A2A.lua' ) __Moose.Include( __Moose.ProgramPath, 'AI/AI_A2A_Patrol.lua' ) @@ -83,16 +92,8 @@ __Moose.Include( __Moose.ProgramPath, 'Tasking/Task_A2G.lua' ) __Moose.Include( __Moose.ProgramPath, 'Tasking/Task_A2A_Dispatcher.lua' ) __Moose.Include( __Moose.ProgramPath, 'Tasking/Task_A2A.lua' ) __Moose.Include( __Moose.ProgramPath, 'Tasking/Task_Cargo.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Tasking/TaskZoneCapture.lua' ) __Moose.Include( __Moose.ProgramPath, 'Moose.lua' ) +__Moose.Include( __Moose.ProgramPath, 'Mission.lua' ) BASE:TraceOnOff( true ) - -local info = debug.getinfo( 1, "S" ) -local source = info.source -- #string -local dir = source:match("^(.*)/") -BASE:E( {"source", source}) -BASE:E( { "dir", dir } ) - -__Moose.MissionPath = dir .. "Mission\\l10n\\DEFAULT\\" - - env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Mission Setup/Moose_.lua b/Moose Mission Setup/Moose_.lua index f0d710d47..8fad43c60 100644 --- a/Moose Mission Setup/Moose_.lua +++ b/Moose Mission Setup/Moose_.lua @@ -1,11 +1,11 @@ env.info('*** MOOSE DYNAMIC INCLUDE START *** ') -env.info('Moose Generation Timestamp: 20171031_0744') +env.info('Moose Generation Timestamp: 20171105_0612') local base=_G __Moose={} -__Moose.Include=function(IncludeFile) +__Moose.Include=function(LuaPath,IncludeFile) if not __Moose.Includes[IncludeFile]then __Moose.Includes[IncludeFile]=IncludeFile -local f=assert(base.loadfile(__Moose.ProgramPath..IncludeFile)) +local f=assert(base.loadfile(LuaPath..IncludeFile)) if f==nil then error("Moose: Could not load Moose file "..IncludeFile) else @@ -16,78 +16,79 @@ end end __Moose.ProgramPath="Scripts/Moose/" __Moose.Includes={} -__Moose.Include('Utilities/Routines.lua') -__Moose.Include('Utilities/Utils.lua') -__Moose.Include('Core/Base.lua') -__Moose.Include('Core/UserFlag.lua') -__Moose.Include('Core/UserSound.lua') -__Moose.Include('Core/Report.lua') -__Moose.Include('Core/Scheduler.lua') -__Moose.Include('Core/ScheduleDispatcher.lua') -__Moose.Include('Core/Event.lua') -__Moose.Include('Core/Settings.lua') -__Moose.Include('Core/Menu.lua') -__Moose.Include('Core/Zone.lua') -__Moose.Include('Core/Database.lua') -__Moose.Include('Core/Set.lua') -__Moose.Include('Core/Point.lua') -__Moose.Include('Core/Velocity.lua') -__Moose.Include('Core/Message.lua') -__Moose.Include('Core/Fsm.lua') -__Moose.Include('Core/Radio.lua') -__Moose.Include('Core/Spawn.lua') -__Moose.Include('Core/SpawnStatic.lua') -__Moose.Include('Core/Goal.lua') -__Moose.Include('Core/Cargo.lua') -__Moose.Include('Core/Spot.lua') -__Moose.Include('Wrapper/Object.lua') -__Moose.Include('Wrapper/Identifiable.lua') -__Moose.Include('Wrapper/Positionable.lua') -__Moose.Include('Wrapper/Controllable.lua') -__Moose.Include('Wrapper/Group.lua') -__Moose.Include('Wrapper/Unit.lua') -__Moose.Include('Wrapper/Client.lua') -__Moose.Include('Wrapper/Static.lua') -__Moose.Include('Wrapper/Airbase.lua') -__Moose.Include('Wrapper/Scenery.lua') -__Moose.Include('Functional/Scoring.lua') -__Moose.Include('Functional/CleanUp.lua') -__Moose.Include('Functional/Movement.lua') -__Moose.Include('Functional/Sead.lua') -__Moose.Include('Functional/Escort.lua') -__Moose.Include('Functional/MissileTrainer.lua') -__Moose.Include('Functional/ATC_Ground.lua') -__Moose.Include('Functional/Detection.lua') -__Moose.Include('Functional/Designate.lua') -__Moose.Include('Functional/RAT.lua') -__Moose.Include('Functional/ZoneGoal.lua') -__Moose.Include('Functional/ZoneGoalCoalition.lua') -__Moose.Include('Functional/ZoneCaptureCoalition.lua') -__Moose.Include('AI/AI_Balancer.lua') -__Moose.Include('AI/AI_A2A.lua') -__Moose.Include('AI/AI_A2A_Patrol.lua') -__Moose.Include('AI/AI_A2A_Cap.lua') -__Moose.Include('AI/AI_A2A_Gci.lua') -__Moose.Include('AI/AI_A2A_Dispatcher.lua') -__Moose.Include('AI/AI_Patrol.lua') -__Moose.Include('AI/AI_Cap.lua') -__Moose.Include('AI/AI_Cas.lua') -__Moose.Include('AI/AI_Bai.lua') -__Moose.Include('AI/AI_Formation.lua') -__Moose.Include('Actions/Act_Assign.lua') -__Moose.Include('Actions/Act_Route.lua') -__Moose.Include('Actions/Act_Account.lua') -__Moose.Include('Actions/Act_Assist.lua') -__Moose.Include('Tasking/CommandCenter.lua') -__Moose.Include('Tasking/Mission.lua') -__Moose.Include('Tasking/Task.lua') -__Moose.Include('Tasking/DetectionManager.lua') -__Moose.Include('Tasking/Task_A2G_Dispatcher.lua') -__Moose.Include('Tasking/Task_A2G.lua') -__Moose.Include('Tasking/Task_A2A_Dispatcher.lua') -__Moose.Include('Tasking/Task_A2A.lua') -__Moose.Include('Tasking/Task_Cargo.lua') -__Moose.Include('Tasking/TaskZoneCapture.lua') -__Moose.Include('Moose.lua') +__Moose.Include(__Moose.ProgramPath,'Utilities/Routines.lua') +__Moose.Include(__Moose.ProgramPath,'Utilities/Utils.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Base.lua') +__Moose.Include(__Moose.ProgramPath,'Core/UserFlag.lua') +__Moose.Include(__Moose.ProgramPath,'Core/UserSound.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Report.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Scheduler.lua') +__Moose.Include(__Moose.ProgramPath,'Core/ScheduleDispatcher.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Event.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Settings.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Menu.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Zone.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Database.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Set.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Point.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Velocity.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Message.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Fsm.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Radio.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Spawn.lua') +__Moose.Include(__Moose.ProgramPath,'Core/SpawnStatic.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Goal.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Cargo.lua') +__Moose.Include(__Moose.ProgramPath,'Core/Spot.lua') +__Moose.Include(__Moose.ProgramPath,'Wrapper/Object.lua') +__Moose.Include(__Moose.ProgramPath,'Wrapper/Identifiable.lua') +__Moose.Include(__Moose.ProgramPath,'Wrapper/Positionable.lua') +__Moose.Include(__Moose.ProgramPath,'Wrapper/Controllable.lua') +__Moose.Include(__Moose.ProgramPath,'Wrapper/Group.lua') +__Moose.Include(__Moose.ProgramPath,'Wrapper/Unit.lua') +__Moose.Include(__Moose.ProgramPath,'Wrapper/Client.lua') +__Moose.Include(__Moose.ProgramPath,'Wrapper/Static.lua') +__Moose.Include(__Moose.ProgramPath,'Wrapper/Airbase.lua') +__Moose.Include(__Moose.ProgramPath,'Wrapper/Scenery.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/Scoring.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/CleanUp.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/Movement.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/Sead.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/Escort.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/MissileTrainer.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/ATC_Ground.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/Detection.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/Designate.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/RAT.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/ZoneGoal.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/ZoneGoalCoalition.lua') +__Moose.Include(__Moose.ProgramPath,'Functional/ZoneCaptureCoalition.lua') +__Moose.Include(__Moose.ProgramPath,'AI/AI_Balancer.lua') +__Moose.Include(__Moose.ProgramPath,'AI/AI_A2A.lua') +__Moose.Include(__Moose.ProgramPath,'AI/AI_A2A_Patrol.lua') +__Moose.Include(__Moose.ProgramPath,'AI/AI_A2A_Cap.lua') +__Moose.Include(__Moose.ProgramPath,'AI/AI_A2A_Gci.lua') +__Moose.Include(__Moose.ProgramPath,'AI/AI_A2A_Dispatcher.lua') +__Moose.Include(__Moose.ProgramPath,'AI/AI_Patrol.lua') +__Moose.Include(__Moose.ProgramPath,'AI/AI_Cap.lua') +__Moose.Include(__Moose.ProgramPath,'AI/AI_Cas.lua') +__Moose.Include(__Moose.ProgramPath,'AI/AI_Bai.lua') +__Moose.Include(__Moose.ProgramPath,'AI/AI_Formation.lua') +__Moose.Include(__Moose.ProgramPath,'Actions/Act_Assign.lua') +__Moose.Include(__Moose.ProgramPath,'Actions/Act_Route.lua') +__Moose.Include(__Moose.ProgramPath,'Actions/Act_Account.lua') +__Moose.Include(__Moose.ProgramPath,'Actions/Act_Assist.lua') +__Moose.Include(__Moose.ProgramPath,'Tasking/CommandCenter.lua') +__Moose.Include(__Moose.ProgramPath,'Tasking/Mission.lua') +__Moose.Include(__Moose.ProgramPath,'Tasking/Task.lua') +__Moose.Include(__Moose.ProgramPath,'Tasking/DetectionManager.lua') +__Moose.Include(__Moose.ProgramPath,'Tasking/Task_A2G_Dispatcher.lua') +__Moose.Include(__Moose.ProgramPath,'Tasking/Task_A2G.lua') +__Moose.Include(__Moose.ProgramPath,'Tasking/Task_A2A_Dispatcher.lua') +__Moose.Include(__Moose.ProgramPath,'Tasking/Task_A2A.lua') +__Moose.Include(__Moose.ProgramPath,'Tasking/Task_Cargo.lua') +__Moose.Include(__Moose.ProgramPath,'Tasking/TaskZoneCapture.lua') +__Moose.Include(__Moose.ProgramPath,'Moose.lua') +__Moose.Include(__Moose.ProgramPath,'Mission.lua') BASE:TraceOnOff(true) env.info('*** MOOSE INCLUDE END *** ') From 2e049ccfd4f130d17375ad6209d8e6220a551ebc Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Sun, 5 Nov 2017 06:30:29 +0100 Subject: [PATCH 04/13] updates --- Moose Development/Debugger/debugger.lua | 2 +- Moose Mission Setup/Moose.lua | 2 +- Moose Mission Setup/Moose_.lua | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Moose Development/Debugger/debugger.lua b/Moose Development/Debugger/debugger.lua index 430819de3..41c170c05 100644 --- a/Moose Development/Debugger/debugger.lua +++ b/Moose Development/Debugger/debugger.lua @@ -2750,7 +2750,7 @@ end -- Sierra Wireless - initial API and implementation ------------------------------------------------------------------------------- -local DBGP_CLIENT_VERSION = "1.4.0" +local DBGP_CLIENT_VERSION = "1.4.1" DBGP_CLIENT_LUA_VERSION = os.getenv "LUA_VERSION" or _VERSION if DBGP_CLIENT_LUA_VERSION ~= "Lua 5.1" and DBGP_CLIENT_LUA_VERSION ~= "Lua 5.2" then print(DBGP_CLIENT_LUA_VERSION .. " is not supported. As fallback, debugger will behave as if it runs on Lua 5.2 vm. You could also try to force it to behave as a Lua 5.1 vm by setting the LUA_VERSION environment variable to 'Lua 5.1'") diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index 239bba24b..3a87320f4 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20171105_0612' ) +env.info( 'Moose Generation Timestamp: 20171105_0627' ) local base = _G diff --git a/Moose Mission Setup/Moose_.lua b/Moose Mission Setup/Moose_.lua index 8fad43c60..a545e1b44 100644 --- a/Moose Mission Setup/Moose_.lua +++ b/Moose Mission Setup/Moose_.lua @@ -1,5 +1,5 @@ env.info('*** MOOSE DYNAMIC INCLUDE START *** ') -env.info('Moose Generation Timestamp: 20171105_0612') +env.info('Moose Generation Timestamp: 20171105_0627') local base=_G __Moose={} __Moose.Include=function(LuaPath,IncludeFile) From e9837acda3abe5a4146b374ced0e86dbc25952bd Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Sun, 5 Nov 2017 06:35:34 +0100 Subject: [PATCH 05/13] Update init --- Moose Development/Moose/Moose.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/Moose Development/Moose/Moose.lua b/Moose Development/Moose/Moose.lua index 8f1fa6fcd..d5f1b6aee 100644 --- a/Moose Development/Moose/Moose.lua +++ b/Moose Development/Moose/Moose.lua @@ -10,8 +10,6 @@ _SCHEDULEDISPATCHER = SCHEDULEDISPATCHER:New() -- Core.Timer#SCHEDULEDISPATCHER _DATABASE = DATABASE:New() -- Core.Database#DATABASE _SETTINGS = SETTINGS:Set() -_SETTINGS:SetSystemMenu( nil ) - local initconnection = require("debugger") initconnection( "127.0.0.1", 10000, "dcsserver", nil, nil, "C:\Program Files\Eagle Dynamics\DCS World" ) From ac0d2fa92c512c08bd9e0d2a47f006c747a000c9 Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Tue, 7 Nov 2017 17:56:59 +0100 Subject: [PATCH 06/13] "Working assets in prototype version" --- Moose Development/Debugger/debugger.lua | 30 +++++++++++++++---- Moose Development/Moose/Moose.lua | 10 +++++-- .../Moose_Dynamic_Loader.lua | 2 +- Moose Mission Setup/Moose.files | 2 +- Moose Mission Setup/Moose.lua | 5 ++-- Moose Mission Setup/Moose_.lua | 5 ++-- 6 files changed, 37 insertions(+), 17 deletions(-) diff --git a/Moose Development/Debugger/debugger.lua b/Moose Development/Debugger/debugger.lua index 41c170c05..8ec5f406e 100644 --- a/Moose Development/Debugger/debugger.lua +++ b/Moose Development/Debugger/debugger.lua @@ -2120,6 +2120,8 @@ function M.get_uri (source) else uri = get_abs_file_uri (source) end + + BASE:E( { uri=uri } ) uri_cache[source] = uri return uri @@ -2157,6 +2159,9 @@ function M.init(executionplatform,workingdirectory) -- define current platform -------------------------- -- check parameter + + BASE:E({executionplatform=executionplatform, workingdirectory=workingdirectory}) + if executionplatform and executionplatform ~= "unix" and executionplatform ~="win" then error("Unable to initialize platform module : execution platform should be 'unix' or 'win'.") end @@ -2213,7 +2218,10 @@ function M.init(executionplatform,workingdirectory) M.to_path = function (parsed_url) return url.unescape(parsed_url.path):gsub("^/", "") end local unixnormalize = M.normalize - M.normalize = function(path) return unixnormalize(path:gsub("\\","/"):lower()) end + M.normalize = function(path) + local unixnormalpath = unixnormalize(path:gsub("\\","/"):lower()) + return unixnormalpath + end -- determine base dir local function getworkingdirectory() @@ -2221,6 +2229,7 @@ function M.init(executionplatform,workingdirectory) if p then local res = p:read("*l") p:close() + BASE:E( { res = res } ) return M.normalize(res) end end @@ -2414,7 +2423,7 @@ end function M.log(level, msg, ...) if (LEVELS[level] or -1) > LOG_LEVEL then return end if select("#", ...) > 0 then msg = msg:format(...) end - io.base.stderr:write(string.format("DEBUGGER\t%s\t%s\n", level, msg)) + env.info(string.format("DEBUGGER\t%s\t%s\n", level, msg)) end return M @@ -2922,7 +2931,10 @@ do BASE:E( { "File", file, "Line", line } ) local bps = file_mapping[file] and file_mapping[file][line] + BASE:E( { "Debug", file_mapping[file], bps } ) if not bps then return nil end + + BASE:E("matched debug") local do_break = false for _, bp in pairs(bps) do @@ -3065,6 +3077,7 @@ end local function debugger_loop(self, async_packet) self.skt:settimeout(nil) -- set socket blocking + BASE:E( "in debugger loop" ) -- in async mode, the debugger does not wait for another command before continuing and does not modify previous_context local async_mode = async_packet ~= nil @@ -3092,7 +3105,9 @@ local function debugger_loop(self, async_packet) -- invoke function local func = commands[cmd] if func then + BASE:E( "before call" ) local ok, cont = xpcall(function() return func(self, args, data) end, debug.traceback) + BASE:E( { "after call", ok } ) if not ok then -- internal exception local code, msg, attr if type(cont) == "table" and getmetatable(cont) == dbgp.DBGP_ERR_METATABLE then @@ -3132,8 +3147,13 @@ end local function line_hook(line) local do_break, packet = nil, nil local info = active_session.coro:getinfo(0, "S") - local uri = platform.get_uri(info.source) - --BASE:E( { "Source", info.source, debugger_uri } ) + + local ModifiedSource = info.source + ModifiedSource = ModifiedSource:match( '^Scripts/Moose/(.*)' ) or ModifiedSource + ModifiedSource = "@"..ModifiedSource + + local uri = platform.get_uri(ModifiedSource) + BASE:E( { "Source", info.source, ModifiedSource, uri, debugger_uri } ) if uri and uri ~= debugger_uri and uri ~= transportmodule_uri then -- the debugger does not break if the source is not known do_break = core.breakpoints.at(uri, line) or core.events.does_match() if do_break then @@ -3162,7 +3182,6 @@ end) local function debugger_hook(event, line) local thread = corunning() or "main" - env.info( "running" ) if event == "call" then stack_levels[thread] = stack_levels[thread] + 1 elseif event == "tail call" then @@ -3185,7 +3204,6 @@ end if rawget(_G, "jit") then debugger_hook = function(event, line) local thread = corunning() or "main" - env.info( "running" ) if event == "call" then if debug.getinfo(2, "S").what == "C" then return end stack_levels[thread] = stack_levels[thread] + 1 diff --git a/Moose Development/Moose/Moose.lua b/Moose Development/Moose/Moose.lua index d5f1b6aee..0fc1e4f97 100644 --- a/Moose Development/Moose/Moose.lua +++ b/Moose Development/Moose/Moose.lua @@ -11,7 +11,11 @@ _DATABASE = DATABASE:New() -- Core.Database#DATABASE _SETTINGS = SETTINGS:Set() -local initconnection = require("debugger") -initconnection( "127.0.0.1", 10000, "dcsserver", nil, nil, "C:\Program Files\Eagle Dynamics\DCS World" ) +package.path = package.path..";D:\\GitHub\\MOOSE_MISSIONS\\SPA - Spawning\\DEBUG test\\?.lua;" -print("hello") + + +local initconnection = require("debugger") +initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win", "C:/Users/svenv/AppData/Local/Temp/DCS/Mission/l10n/DEFAULT" ) + +print("Debugger is configured!") diff --git a/Moose Mission Setup/Moose Create Dynamic/Moose_Dynamic_Loader.lua b/Moose Mission Setup/Moose Create Dynamic/Moose_Dynamic_Loader.lua index 34c2cbc17..f78858836 100644 --- a/Moose Mission Setup/Moose Create Dynamic/Moose_Dynamic_Loader.lua +++ b/Moose Mission Setup/Moose Create Dynamic/Moose_Dynamic_Loader.lua @@ -10,7 +10,7 @@ __Moose.Include = function( LuaPath, IncludeFile ) if f == nil then error ("Moose: Could not load Moose file " .. IncludeFile ) else - env.info( "Moose: " .. IncludeFile .. " dynamically loaded from " .. __Moose.ProgramPath ) + env.info( "Moose: " .. IncludeFile .. " dynamically loaded from " .. LuaPath ) return f() end end diff --git a/Moose Mission Setup/Moose.files b/Moose Mission Setup/Moose.files index c5dc29cde..0179920de 100644 --- a/Moose Mission Setup/Moose.files +++ b/Moose Mission Setup/Moose.files @@ -78,4 +78,4 @@ Tasking/Task_Cargo.lua Tasking/TaskZoneCapture.lua Moose.lua -Mission.lua + diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index 3a87320f4..2b0aa7d9b 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20171105_0627' ) +env.info( 'Moose Generation Timestamp: 20171107_1722' ) local base = _G @@ -12,7 +12,7 @@ __Moose.Include = function( LuaPath, IncludeFile ) if f == nil then error ("Moose: Could not load Moose file " .. IncludeFile ) else - env.info( "Moose: " .. IncludeFile .. " dynamically loaded from " .. __Moose.ProgramPath ) + env.info( "Moose: " .. IncludeFile .. " dynamically loaded from " .. LuaPath ) return f() end end @@ -94,6 +94,5 @@ __Moose.Include( __Moose.ProgramPath, 'Tasking/Task_A2A.lua' ) __Moose.Include( __Moose.ProgramPath, 'Tasking/Task_Cargo.lua' ) __Moose.Include( __Moose.ProgramPath, 'Tasking/TaskZoneCapture.lua' ) __Moose.Include( __Moose.ProgramPath, 'Moose.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Mission.lua' ) BASE:TraceOnOff( true ) env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Mission Setup/Moose_.lua b/Moose Mission Setup/Moose_.lua index a545e1b44..f1ef98916 100644 --- a/Moose Mission Setup/Moose_.lua +++ b/Moose Mission Setup/Moose_.lua @@ -1,5 +1,5 @@ env.info('*** MOOSE DYNAMIC INCLUDE START *** ') -env.info('Moose Generation Timestamp: 20171105_0627') +env.info('Moose Generation Timestamp: 20171107_1722') local base=_G __Moose={} __Moose.Include=function(LuaPath,IncludeFile) @@ -9,7 +9,7 @@ local f=assert(base.loadfile(LuaPath..IncludeFile)) if f==nil then error("Moose: Could not load Moose file "..IncludeFile) else -env.info("Moose: "..IncludeFile.." dynamically loaded from "..__Moose.ProgramPath) +env.info("Moose: "..IncludeFile.." dynamically loaded from "..LuaPath) return f() end end @@ -89,6 +89,5 @@ __Moose.Include(__Moose.ProgramPath,'Tasking/Task_A2A.lua') __Moose.Include(__Moose.ProgramPath,'Tasking/Task_Cargo.lua') __Moose.Include(__Moose.ProgramPath,'Tasking/TaskZoneCapture.lua') __Moose.Include(__Moose.ProgramPath,'Moose.lua') -__Moose.Include(__Moose.ProgramPath,'Mission.lua') BASE:TraceOnOff(true) env.info('*** MOOSE INCLUDE END *** ') From e229e2e381cf39d50bbaa6ddf6eda45816dd9422 Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Tue, 7 Nov 2017 18:06:18 +0100 Subject: [PATCH 07/13] Documentation --- Moose Development/Debugger/debugger.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Moose Development/Debugger/debugger.lua b/Moose Development/Debugger/debugger.lua index 8ec5f406e..aa1f54f47 100644 --- a/Moose Development/Debugger/debugger.lua +++ b/Moose Development/Debugger/debugger.lua @@ -1,4 +1,7 @@ ------------------------------------------------------------------------------- +-- MOOSE VERSION for DCS WORLD +-- Modified by FlightControl to understand "DCS". +------------------------------------------------------------------------------- -- Copyright (c) 2011-2012 Sierra Wireless and others. -- All rights reserved. This program and the accompanying materials -- are made available under the terms of the Eclipse Public License v1.0 From 7c7722efe641930fee3e47c172b02d365e551f96 Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Tue, 7 Nov 2017 19:01:11 +0100 Subject: [PATCH 08/13] Add luasocket place --- Moose Development/Moose/Moose.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Moose Development/Moose/Moose.lua b/Moose Development/Moose/Moose.lua index 0fc1e4f97..d9c652de4 100644 --- a/Moose Development/Moose/Moose.lua +++ b/Moose Development/Moose/Moose.lua @@ -11,9 +11,7 @@ _DATABASE = DATABASE:New() -- Core.Database#DATABASE _SETTINGS = SETTINGS:Set() -package.path = package.path..";D:\\GitHub\\MOOSE_MISSIONS\\SPA - Spawning\\DEBUG test\\?.lua;" - - +package.path = package.path..";.\\LuaSocket\\?.lua;" local initconnection = require("debugger") initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win", "C:/Users/svenv/AppData/Local/Temp/DCS/Mission/l10n/DEFAULT" ) From 0a819f254a1dcd087f8158bcd8a86a9c62c0fc7e Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Wed, 8 Nov 2017 09:41:18 +0100 Subject: [PATCH 09/13] Progress 2 --- Moose Development/Debugger/debugger.lua | 22 +++++++++++++++++----- Moose Development/Moose/Moose.lua | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Moose Development/Debugger/debugger.lua b/Moose Development/Debugger/debugger.lua index aa1f54f47..1c99354ad 100644 --- a/Moose Development/Debugger/debugger.lua +++ b/Moose Development/Debugger/debugger.lua @@ -724,6 +724,7 @@ end --TODO dynamic code handling -- The DBGp specification is not clear about the line number meaning, this implementation is 1-based and numbers are inclusive function M.source(self, args) + BASE:E( { self = self, args = args } ) local path if args.f then path = platform.get_path(args.f) @@ -732,11 +733,17 @@ function M.source(self, args) assert(path:sub(1,1) == "@") path = path:sub(2) end + BASE:E( { path = path } ) local file, err = io.open(path) - if not file then dbgp.error(100, err, { success = 0 }) end + if not file then + BASE:E( { "Not found" } ) + dbgp.error(100, err, { success = 0 }) + end + BASE:E( { "Found" } ) -- Try to identify compiled files - if file:read(1) == "\033" then dbgp.error(100, args.f.." is bytecode", { success = 0 }) end - file:seek("set", 0) + --if file:read(1) == "\033" then dbgp.error(100, args.f.." is bytecode", { success = 0 }) end + BASE:E( { file = file } ) + --file:seek("set", 0) local srclines = { } @@ -2113,7 +2120,12 @@ end function M.get_uri (source) -- search in cache + if string.sub(1,1) ~= "@" then + source = "@" .. source + end + BASE:E( { source=source, uri_cache = uri_cache } ) local uri = uri_cache[source] + BASE:E( { uri=uri } ) if uri ~= nil then return uri end -- not found, create uri @@ -3152,8 +3164,8 @@ local function line_hook(line) local info = active_session.coro:getinfo(0, "S") local ModifiedSource = info.source - ModifiedSource = ModifiedSource:match( '^Scripts/Moose/(.*)' ) or ModifiedSource - ModifiedSource = "@"..ModifiedSource + --ModifiedSource = ModifiedSource:match( '^Scripts/Moose/(.*)' ) or ModifiedSource + --ModifiedSource = ModifiedSource local uri = platform.get_uri(ModifiedSource) BASE:E( { "Source", info.source, ModifiedSource, uri, debugger_uri } ) diff --git a/Moose Development/Moose/Moose.lua b/Moose Development/Moose/Moose.lua index d9c652de4..cef97254c 100644 --- a/Moose Development/Moose/Moose.lua +++ b/Moose Development/Moose/Moose.lua @@ -14,6 +14,6 @@ _SETTINGS = SETTINGS:Set() package.path = package.path..";.\\LuaSocket\\?.lua;" local initconnection = require("debugger") -initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win", "C:/Users/svenv/AppData/Local/Temp/DCS/Mission/l10n/DEFAULT" ) +initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win", "" ) print("Debugger is configured!") From f65238efe605e67b2a672259f3cbdb252a7a574c Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Thu, 9 Nov 2017 21:36:11 +0100 Subject: [PATCH 10/13] Got something working finally. --- Moose Development/Debugger/debugger.lua | 44 +++++++++---------- .../Moose/Utilities/Routines.lua | 6 ++- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Moose Development/Debugger/debugger.lua b/Moose Development/Debugger/debugger.lua index 1c99354ad..a03dcb68b 100644 --- a/Moose Development/Debugger/debugger.lua +++ b/Moose Development/Debugger/debugger.lua @@ -2121,25 +2121,29 @@ end function M.get_uri (source) -- search in cache if string.sub(1,1) ~= "@" then - source = "@" .. source - end - BASE:E( { source=source, uri_cache = uri_cache } ) - local uri = uri_cache[source] - BASE:E( { uri=uri } ) - if uri ~= nil then return uri end - - -- not found, create uri - if util.features.uri == "module" then - uri = get_module_uri(source) - if not uri then uri = get_abs_file_uri (source) end - else - uri = get_abs_file_uri (source) + source = source:match( "(.*\.lua)$") + if source then + source = "@" .. source + end end - BASE:E( { uri=uri } ) - uri_cache[source] = uri - return uri + if source then + local uri = uri_cache[source] + if uri ~= nil then return uri end + + -- not found, create uri + if util.features.uri == "module" then + uri = get_module_uri(source) + if not uri then uri = get_abs_file_uri (source) end + else + uri = get_abs_file_uri (source) + end + uri_cache[source] = uri + return uri + else + return nil + end end -- get path file from uri @@ -2931,8 +2935,6 @@ do filereg[bp.lineno] = linereg end - BASE:E( { "Breakpoint", bp } ) - table.insert(linereg, bp) id_mapping[bpid] = bp @@ -2943,14 +2945,9 @@ do -- and returns whether a breakpoint has matched (boolean) function core.breakpoints.at(file, line) - BASE:E( { "File", file, "Line", line } ) - local bps = file_mapping[file] and file_mapping[file][line] - BASE:E( { "Debug", file_mapping[file], bps } ) if not bps then return nil end - BASE:E("matched debug") - local do_break = false for _, bp in pairs(bps) do if bp.state == "enabled" then @@ -3168,7 +3165,6 @@ local function line_hook(line) --ModifiedSource = ModifiedSource local uri = platform.get_uri(ModifiedSource) - BASE:E( { "Source", info.source, ModifiedSource, uri, debugger_uri } ) if uri and uri ~= debugger_uri and uri ~= transportmodule_uri then -- the debugger does not break if the source is not known do_break = core.breakpoints.at(uri, line) or core.events.does_match() if do_break then diff --git a/Moose Development/Moose/Utilities/Routines.lua b/Moose Development/Moose/Utilities/Routines.lua index 3743752b3..508a35ed5 100644 --- a/Moose Development/Moose/Utilities/Routines.lua +++ b/Moose Development/Moose/Utilities/Routines.lua @@ -111,7 +111,11 @@ routines.utils.oneLineSerialize = function(tbl) -- serialization of a table all tbl_str[#tbl_str + 1] = '}' return table.concat(tbl_str) else + if type(tbl) == 'string' then + return tbl + else return tostring(tbl) + end end end @@ -127,7 +131,7 @@ routines.utils.basicSerialize = function(s) if ((type(s) == 'number') or (type(s) == 'boolean') or (type(s) == 'function') or (type(s) == 'table') or (type(s) == 'userdata') ) then return tostring(s) elseif type(s) == 'string' then - s = string.format('%q', s) + s = string.format('%s', s:gsub( "%%", "%%%%" ) ) return s end end From 7ff06b5ef803c86881f593e9b44349d33cdce384 Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Thu, 9 Nov 2017 22:57:18 +0100 Subject: [PATCH 11/13] New way of loading the debugger. --- Moose Development/Debugger/connect.lua | 56 +++++++++++++++++++++++++ Moose Development/Debugger/debugger.lua | 16 ++----- Moose Development/Moose/Moose.lua | 6 --- 3 files changed, 60 insertions(+), 18 deletions(-) create mode 100644 Moose Development/Debugger/connect.lua diff --git a/Moose Development/Debugger/connect.lua b/Moose Development/Debugger/connect.lua new file mode 100644 index 000000000..868088dfc --- /dev/null +++ b/Moose Development/Debugger/connect.lua @@ -0,0 +1,56 @@ + +-- If you want to use the debugger, move these 3 lines into MissionScripting.lua of DCS world. + + + +--------------------------------------------------------------------------------------------------------------------------- +-- MissionScripting.lua modifications +--------------------------------------------------------------------------------------------------------------------------- + +-- --Initialization script for the Mission lua Environment (SSE) +-- +-- dofile('Scripts/ScriptingSystem.lua') +-- +-- package.path = package.path..";.\\LuaSocket\\?.lua;" +-- local initconnection = require("debugger") +-- initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win", "" ) +-- +-- --Sanitize Mission Scripting environment +-- --This makes unavailable some unsecure functions. +-- --Mission downloaded from server to client may contain potentialy harmful lua code that may use these functions. +-- --You can remove the code below and make availble these functions at your own risk. +-- +-- local function sanitizeModule(name) +-- _G[name] = nil +-- package.loaded[name] = nil +-- end +-- +-- do +-- sanitizeModule('os') +-- sanitizeModule('io') +-- sanitizeModule('lfs') +-- require = nil +-- loadlib = nil +-- end + +--------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------- + + + +-- So for clarity, these are the three lines of code that matter! + +-- Add LuaSocket to the LUAPATH, so that it can be found. +package.path = package.path..";.\\LuaSocket\\?.lua;" + +-- Connect to the debugger, first require it. +local initconnection = require("debugger") + +-- Now make the connection.. +-- "127.0.0.1" is the localhost. +-- 10000 is the port. If you wanna use another port in LDT, change this number too! +-- "dcsserver" is the name of the server. If you wanna use another name, change the name here too! +-- nil (is for transport protocol, but not using this) +-- "win" don't touch. But is important to indicate that we are in a windows environment to the debugger script. +initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win" ) + diff --git a/Moose Development/Debugger/debugger.lua b/Moose Development/Debugger/debugger.lua index a03dcb68b..e92e1b2b5 100644 --- a/Moose Development/Debugger/debugger.lua +++ b/Moose Development/Debugger/debugger.lua @@ -724,7 +724,6 @@ end --TODO dynamic code handling -- The DBGp specification is not clear about the line number meaning, this implementation is 1-based and numbers are inclusive function M.source(self, args) - BASE:E( { self = self, args = args } ) local path if args.f then path = platform.get_path(args.f) @@ -733,16 +732,13 @@ function M.source(self, args) assert(path:sub(1,1) == "@") path = path:sub(2) end - BASE:E( { path = path } ) local file, err = io.open(path) if not file then - BASE:E( { "Not found" } ) dbgp.error(100, err, { success = 0 }) end - BASE:E( { "Found" } ) + -- Commented out by FlightControl. Not working in DCS. -- Try to identify compiled files --if file:read(1) == "\033" then dbgp.error(100, args.f.." is bytecode", { success = 0 }) end - BASE:E( { file = file } ) --file:seek("set", 0) @@ -2178,9 +2174,7 @@ function M.init(executionplatform,workingdirectory) -- define current platform -------------------------- -- check parameter - - BASE:E({executionplatform=executionplatform, workingdirectory=workingdirectory}) - + if executionplatform and executionplatform ~= "unix" and executionplatform ~="win" then error("Unable to initialize platform module : execution platform should be 'unix' or 'win'.") end @@ -2248,7 +2242,6 @@ function M.init(executionplatform,workingdirectory) if p then local res = p:read("*l") p:close() - BASE:E( { res = res } ) return M.normalize(res) end end @@ -2787,6 +2780,8 @@ end local debug = require "debug" +local io = io + -- To avoid cyclic dependency, internal state of the debugger that must be accessed -- elsewhere (in commands most likely) will be stored in a fake module "debugger.core" local core = { } @@ -3089,7 +3084,6 @@ end local function debugger_loop(self, async_packet) self.skt:settimeout(nil) -- set socket blocking - BASE:E( "in debugger loop" ) -- in async mode, the debugger does not wait for another command before continuing and does not modify previous_context local async_mode = async_packet ~= nil @@ -3117,9 +3111,7 @@ local function debugger_loop(self, async_packet) -- invoke function local func = commands[cmd] if func then - BASE:E( "before call" ) local ok, cont = xpcall(function() return func(self, args, data) end, debug.traceback) - BASE:E( { "after call", ok } ) if not ok then -- internal exception local code, msg, attr if type(cont) == "table" and getmetatable(cont) == dbgp.DBGP_ERR_METATABLE then diff --git a/Moose Development/Moose/Moose.lua b/Moose Development/Moose/Moose.lua index cef97254c..25308e705 100644 --- a/Moose Development/Moose/Moose.lua +++ b/Moose Development/Moose/Moose.lua @@ -11,9 +11,3 @@ _DATABASE = DATABASE:New() -- Core.Database#DATABASE _SETTINGS = SETTINGS:Set() -package.path = package.path..";.\\LuaSocket\\?.lua;" - -local initconnection = require("debugger") -initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win", "" ) - -print("Debugger is configured!") From 46e76a383327d17dd51d2c2061425602337f2ea9 Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Fri, 10 Nov 2017 06:53:04 +0100 Subject: [PATCH 12/13] updated connect --- Moose Development/Debugger/connect.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Moose Development/Debugger/connect.lua b/Moose Development/Debugger/connect.lua index 868088dfc..6d0c41c4b 100644 --- a/Moose Development/Debugger/connect.lua +++ b/Moose Development/Debugger/connect.lua @@ -27,7 +27,7 @@ -- -- do -- sanitizeModule('os') --- sanitizeModule('io') +-- --sanitizeModule('io') -- sanitizeModule('lfs') -- require = nil -- loadlib = nil @@ -52,5 +52,5 @@ local initconnection = require("debugger") -- "dcsserver" is the name of the server. If you wanna use another name, change the name here too! -- nil (is for transport protocol, but not using this) -- "win" don't touch. But is important to indicate that we are in a windows environment to the debugger script. -initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win" ) +initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win", "" ) From 131db746303ed3e73c589ff5154feaef5490cbdc Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Fri, 10 Nov 2017 10:58:05 +0100 Subject: [PATCH 13/13] Release test --- .../Moose_Dynamic_Loader.lua | 16 +- Moose Mission Setup/Moose.lua | 164 ++++----- Moose Mission Setup/Moose_.lua | 164 ++++----- Moose Mission Setup/Moose_Create.lua | 2 +- docs/Debugging/DEBUG_Add_Favorites.JPG | Bin 0 -> 35689 bytes docs/Debugging/DEBUG_Breakpoint.JPG | Bin 0 -> 32843 bytes docs/Debugging/DEBUG_Breakpoint_List.JPG | Bin 0 -> 56963 bytes docs/Debugging/DEBUG_Bug.JPG | Bin 0 -> 8727 bytes docs/Debugging/DEBUG_Debugger.JPG | Bin 0 -> 80178 bytes docs/Debugging/DEBUG_Dynamic.JPG | Bin 0 -> 30727 bytes docs/Debugging/DEBUG_Engine.JPG | Bin 0 -> 11405 bytes docs/Debugging/DEBUG_Favorites.JPG | Bin 0 -> 18767 bytes docs/Debugging/DEBUG_Flag.JPG | Bin 0 -> 30940 bytes docs/Debugging/DEBUG_Intro.JPG | Bin 0 -> 78688 bytes docs/Debugging/DEBUG_LDT_Setup.JPG | Bin 0 -> 111751 bytes docs/Debugging/DEBUG_Listener.JPG | Bin 0 -> 19966 bytes docs/Debugging/DEBUG_Loader.JPG | Bin 0 -> 19071 bytes docs/Debugging/DEBUG_MissionScripting.JPG | Bin 0 -> 59586 bytes docs/Debugging/DEBUG_Run_Listener.JPG | Bin 0 -> 15512 bytes docs/Debugging/DEBUG_Session.JPG | Bin 0 -> 88976 bytes docs/Debugging/DEBUG_Source.JPG | Bin 0 -> 47097 bytes docs/Debugging/DEBUG_Static.JPG | Bin 0 -> 58730 bytes docs/Debugging/DEBUG_Tracking.JPG | Bin 0 -> 14701 bytes docs/Interactive_Debug_Guide.md | 315 ++++++++++++++++++ docs/README.md | 5 + 25 files changed, 493 insertions(+), 173 deletions(-) create mode 100644 docs/Debugging/DEBUG_Add_Favorites.JPG create mode 100644 docs/Debugging/DEBUG_Breakpoint.JPG create mode 100644 docs/Debugging/DEBUG_Breakpoint_List.JPG create mode 100644 docs/Debugging/DEBUG_Bug.JPG create mode 100644 docs/Debugging/DEBUG_Debugger.JPG create mode 100644 docs/Debugging/DEBUG_Dynamic.JPG create mode 100644 docs/Debugging/DEBUG_Engine.JPG create mode 100644 docs/Debugging/DEBUG_Favorites.JPG create mode 100644 docs/Debugging/DEBUG_Flag.JPG create mode 100644 docs/Debugging/DEBUG_Intro.JPG create mode 100644 docs/Debugging/DEBUG_LDT_Setup.JPG create mode 100644 docs/Debugging/DEBUG_Listener.JPG create mode 100644 docs/Debugging/DEBUG_Loader.JPG create mode 100644 docs/Debugging/DEBUG_MissionScripting.JPG create mode 100644 docs/Debugging/DEBUG_Run_Listener.JPG create mode 100644 docs/Debugging/DEBUG_Session.JPG create mode 100644 docs/Debugging/DEBUG_Source.JPG create mode 100644 docs/Debugging/DEBUG_Static.JPG create mode 100644 docs/Debugging/DEBUG_Tracking.JPG create mode 100644 docs/Interactive_Debug_Guide.md diff --git a/Moose Mission Setup/Moose Create Dynamic/Moose_Dynamic_Loader.lua b/Moose Mission Setup/Moose Create Dynamic/Moose_Dynamic_Loader.lua index f78858836..9ab74881e 100644 --- a/Moose Mission Setup/Moose Create Dynamic/Moose_Dynamic_Loader.lua +++ b/Moose Mission Setup/Moose Create Dynamic/Moose_Dynamic_Loader.lua @@ -1,21 +1,21 @@ local base = _G -__Moose = {} +MOOSE = {} -__Moose.Include = function( LuaPath, IncludeFile ) - if not __Moose.Includes[ IncludeFile ] then - __Moose.Includes[IncludeFile] = IncludeFile +MOOSE.Include = function( LuaPath, IncludeFile ) + if not MOOSE.Includes[ IncludeFile ] then + MOOSE.Includes[IncludeFile] = IncludeFile local f = assert( base.loadfile( LuaPath .. IncludeFile ) ) if f == nil then - error ("Moose: Could not load Moose file " .. IncludeFile ) + error ("MOOSE: Could not load Moose file " .. IncludeFile ) else - env.info( "Moose: " .. IncludeFile .. " dynamically loaded from " .. LuaPath ) + env.info( "MOOSE: " .. IncludeFile .. " dynamically loaded from " .. LuaPath ) return f() end end end -__Moose.ProgramPath = "Scripts/Moose/" +MOOSE.ProgramPath = "Scripts/Moose/" -__Moose.Includes = {} +MOOSE.Includes = {} diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index 2b0aa7d9b..539b24049 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,98 +1,98 @@ env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20171107_1722' ) +env.info( 'Moose Generation Timestamp: 20171110_1045' ) local base = _G -__Moose = {} +MOOSE = {} -__Moose.Include = function( LuaPath, IncludeFile ) - if not __Moose.Includes[ IncludeFile ] then - __Moose.Includes[IncludeFile] = IncludeFile +MOOSE.Include = function( LuaPath, IncludeFile ) + if not MOOSE.Includes[ IncludeFile ] then + MOOSE.Includes[IncludeFile] = IncludeFile local f = assert( base.loadfile( LuaPath .. IncludeFile ) ) if f == nil then - error ("Moose: Could not load Moose file " .. IncludeFile ) + error ("MOOSE: Could not load Moose file " .. IncludeFile ) else - env.info( "Moose: " .. IncludeFile .. " dynamically loaded from " .. LuaPath ) + env.info( "MOOSE: " .. IncludeFile .. " dynamically loaded from " .. LuaPath ) return f() end end end -__Moose.ProgramPath = "Scripts/Moose/" +MOOSE.ProgramPath = "Scripts/Moose/" -__Moose.Includes = {} -__Moose.Include( __Moose.ProgramPath, 'Utilities/Routines.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Utilities/Utils.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Base.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/UserFlag.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/UserSound.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Report.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Scheduler.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/ScheduleDispatcher.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Event.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Settings.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Menu.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Zone.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Database.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Set.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Point.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Velocity.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Message.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Fsm.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Radio.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Spawn.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/SpawnStatic.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Goal.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Cargo.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Core/Spot.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Wrapper/Object.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Wrapper/Identifiable.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Wrapper/Positionable.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Wrapper/Controllable.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Wrapper/Group.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Wrapper/Unit.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Wrapper/Client.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Wrapper/Static.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Wrapper/Airbase.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Wrapper/Scenery.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/Scoring.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/CleanUp.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/Movement.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/Sead.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/Escort.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/MissileTrainer.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/ATC_Ground.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/Detection.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/Designate.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/RAT.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/ZoneGoal.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/ZoneGoalCoalition.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Functional/ZoneCaptureCoalition.lua' ) -__Moose.Include( __Moose.ProgramPath, 'AI/AI_Balancer.lua' ) -__Moose.Include( __Moose.ProgramPath, 'AI/AI_A2A.lua' ) -__Moose.Include( __Moose.ProgramPath, 'AI/AI_A2A_Patrol.lua' ) -__Moose.Include( __Moose.ProgramPath, 'AI/AI_A2A_Cap.lua' ) -__Moose.Include( __Moose.ProgramPath, 'AI/AI_A2A_Gci.lua' ) -__Moose.Include( __Moose.ProgramPath, 'AI/AI_A2A_Dispatcher.lua' ) -__Moose.Include( __Moose.ProgramPath, 'AI/AI_Patrol.lua' ) -__Moose.Include( __Moose.ProgramPath, 'AI/AI_Cap.lua' ) -__Moose.Include( __Moose.ProgramPath, 'AI/AI_Cas.lua' ) -__Moose.Include( __Moose.ProgramPath, 'AI/AI_Bai.lua' ) -__Moose.Include( __Moose.ProgramPath, 'AI/AI_Formation.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Actions/Act_Assign.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Actions/Act_Route.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Actions/Act_Account.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Actions/Act_Assist.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Tasking/CommandCenter.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Tasking/Mission.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Tasking/Task.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Tasking/DetectionManager.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Tasking/Task_A2G_Dispatcher.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Tasking/Task_A2G.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Tasking/Task_A2A_Dispatcher.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Tasking/Task_A2A.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Tasking/Task_Cargo.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Tasking/TaskZoneCapture.lua' ) -__Moose.Include( __Moose.ProgramPath, 'Moose.lua' ) +MOOSE.Includes = {} +MOOSE.Include( MOOSE.ProgramPath, 'Utilities/Routines.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Utilities/Utils.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Base.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/UserFlag.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/UserSound.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Report.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Scheduler.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/ScheduleDispatcher.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Event.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Settings.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Menu.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Zone.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Database.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Set.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Point.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Velocity.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Message.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Fsm.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Radio.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Spawn.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/SpawnStatic.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Goal.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Cargo.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Core/Spot.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Wrapper/Object.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Wrapper/Identifiable.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Wrapper/Positionable.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Wrapper/Controllable.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Wrapper/Group.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Wrapper/Unit.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Wrapper/Client.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Wrapper/Static.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Wrapper/Airbase.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Wrapper/Scenery.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/Scoring.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/CleanUp.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/Movement.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/Sead.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/Escort.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/MissileTrainer.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/ATC_Ground.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/Detection.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/Designate.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/RAT.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/ZoneGoal.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/ZoneGoalCoalition.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Functional/ZoneCaptureCoalition.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'AI/AI_Balancer.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'AI/AI_A2A.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'AI/AI_A2A_Patrol.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'AI/AI_A2A_Cap.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'AI/AI_A2A_Gci.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'AI/AI_A2A_Dispatcher.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'AI/AI_Patrol.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'AI/AI_Cap.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'AI/AI_Cas.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'AI/AI_Bai.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'AI/AI_Formation.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Actions/Act_Assign.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Actions/Act_Route.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Actions/Act_Account.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Actions/Act_Assist.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Tasking/CommandCenter.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Tasking/Mission.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Tasking/Task.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Tasking/DetectionManager.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Tasking/Task_A2G_Dispatcher.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Tasking/Task_A2G.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Tasking/Task_A2A_Dispatcher.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Tasking/Task_A2A.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Tasking/Task_Cargo.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Tasking/TaskZoneCapture.lua' ) +MOOSE.Include( MOOSE.ProgramPath, 'Moose.lua' ) BASE:TraceOnOff( true ) env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Mission Setup/Moose_.lua b/Moose Mission Setup/Moose_.lua index f1ef98916..404ecfc7b 100644 --- a/Moose Mission Setup/Moose_.lua +++ b/Moose Mission Setup/Moose_.lua @@ -1,93 +1,93 @@ env.info('*** MOOSE DYNAMIC INCLUDE START *** ') -env.info('Moose Generation Timestamp: 20171107_1722') +env.info('Moose Generation Timestamp: 20171110_1045') local base=_G -__Moose={} -__Moose.Include=function(LuaPath,IncludeFile) -if not __Moose.Includes[IncludeFile]then -__Moose.Includes[IncludeFile]=IncludeFile +MOOSE={} +MOOSE.Include=function(LuaPath,IncludeFile) +if not MOOSE.Includes[IncludeFile]then +MOOSE.Includes[IncludeFile]=IncludeFile local f=assert(base.loadfile(LuaPath..IncludeFile)) if f==nil then -error("Moose: Could not load Moose file "..IncludeFile) +error("MOOSE: Could not load Moose file "..IncludeFile) else -env.info("Moose: "..IncludeFile.." dynamically loaded from "..LuaPath) +env.info("MOOSE: "..IncludeFile.." dynamically loaded from "..LuaPath) return f() end end end -__Moose.ProgramPath="Scripts/Moose/" -__Moose.Includes={} -__Moose.Include(__Moose.ProgramPath,'Utilities/Routines.lua') -__Moose.Include(__Moose.ProgramPath,'Utilities/Utils.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Base.lua') -__Moose.Include(__Moose.ProgramPath,'Core/UserFlag.lua') -__Moose.Include(__Moose.ProgramPath,'Core/UserSound.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Report.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Scheduler.lua') -__Moose.Include(__Moose.ProgramPath,'Core/ScheduleDispatcher.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Event.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Settings.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Menu.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Zone.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Database.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Set.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Point.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Velocity.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Message.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Fsm.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Radio.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Spawn.lua') -__Moose.Include(__Moose.ProgramPath,'Core/SpawnStatic.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Goal.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Cargo.lua') -__Moose.Include(__Moose.ProgramPath,'Core/Spot.lua') -__Moose.Include(__Moose.ProgramPath,'Wrapper/Object.lua') -__Moose.Include(__Moose.ProgramPath,'Wrapper/Identifiable.lua') -__Moose.Include(__Moose.ProgramPath,'Wrapper/Positionable.lua') -__Moose.Include(__Moose.ProgramPath,'Wrapper/Controllable.lua') -__Moose.Include(__Moose.ProgramPath,'Wrapper/Group.lua') -__Moose.Include(__Moose.ProgramPath,'Wrapper/Unit.lua') -__Moose.Include(__Moose.ProgramPath,'Wrapper/Client.lua') -__Moose.Include(__Moose.ProgramPath,'Wrapper/Static.lua') -__Moose.Include(__Moose.ProgramPath,'Wrapper/Airbase.lua') -__Moose.Include(__Moose.ProgramPath,'Wrapper/Scenery.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/Scoring.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/CleanUp.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/Movement.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/Sead.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/Escort.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/MissileTrainer.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/ATC_Ground.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/Detection.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/Designate.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/RAT.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/ZoneGoal.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/ZoneGoalCoalition.lua') -__Moose.Include(__Moose.ProgramPath,'Functional/ZoneCaptureCoalition.lua') -__Moose.Include(__Moose.ProgramPath,'AI/AI_Balancer.lua') -__Moose.Include(__Moose.ProgramPath,'AI/AI_A2A.lua') -__Moose.Include(__Moose.ProgramPath,'AI/AI_A2A_Patrol.lua') -__Moose.Include(__Moose.ProgramPath,'AI/AI_A2A_Cap.lua') -__Moose.Include(__Moose.ProgramPath,'AI/AI_A2A_Gci.lua') -__Moose.Include(__Moose.ProgramPath,'AI/AI_A2A_Dispatcher.lua') -__Moose.Include(__Moose.ProgramPath,'AI/AI_Patrol.lua') -__Moose.Include(__Moose.ProgramPath,'AI/AI_Cap.lua') -__Moose.Include(__Moose.ProgramPath,'AI/AI_Cas.lua') -__Moose.Include(__Moose.ProgramPath,'AI/AI_Bai.lua') -__Moose.Include(__Moose.ProgramPath,'AI/AI_Formation.lua') -__Moose.Include(__Moose.ProgramPath,'Actions/Act_Assign.lua') -__Moose.Include(__Moose.ProgramPath,'Actions/Act_Route.lua') -__Moose.Include(__Moose.ProgramPath,'Actions/Act_Account.lua') -__Moose.Include(__Moose.ProgramPath,'Actions/Act_Assist.lua') -__Moose.Include(__Moose.ProgramPath,'Tasking/CommandCenter.lua') -__Moose.Include(__Moose.ProgramPath,'Tasking/Mission.lua') -__Moose.Include(__Moose.ProgramPath,'Tasking/Task.lua') -__Moose.Include(__Moose.ProgramPath,'Tasking/DetectionManager.lua') -__Moose.Include(__Moose.ProgramPath,'Tasking/Task_A2G_Dispatcher.lua') -__Moose.Include(__Moose.ProgramPath,'Tasking/Task_A2G.lua') -__Moose.Include(__Moose.ProgramPath,'Tasking/Task_A2A_Dispatcher.lua') -__Moose.Include(__Moose.ProgramPath,'Tasking/Task_A2A.lua') -__Moose.Include(__Moose.ProgramPath,'Tasking/Task_Cargo.lua') -__Moose.Include(__Moose.ProgramPath,'Tasking/TaskZoneCapture.lua') -__Moose.Include(__Moose.ProgramPath,'Moose.lua') +MOOSE.ProgramPath="Scripts/Moose/" +MOOSE.Includes={} +MOOSE.Include(MOOSE.ProgramPath,'Utilities/Routines.lua') +MOOSE.Include(MOOSE.ProgramPath,'Utilities/Utils.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Base.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/UserFlag.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/UserSound.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Report.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Scheduler.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/ScheduleDispatcher.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Event.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Settings.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Menu.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Zone.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Database.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Set.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Point.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Velocity.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Message.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Fsm.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Radio.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Spawn.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/SpawnStatic.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Goal.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Cargo.lua') +MOOSE.Include(MOOSE.ProgramPath,'Core/Spot.lua') +MOOSE.Include(MOOSE.ProgramPath,'Wrapper/Object.lua') +MOOSE.Include(MOOSE.ProgramPath,'Wrapper/Identifiable.lua') +MOOSE.Include(MOOSE.ProgramPath,'Wrapper/Positionable.lua') +MOOSE.Include(MOOSE.ProgramPath,'Wrapper/Controllable.lua') +MOOSE.Include(MOOSE.ProgramPath,'Wrapper/Group.lua') +MOOSE.Include(MOOSE.ProgramPath,'Wrapper/Unit.lua') +MOOSE.Include(MOOSE.ProgramPath,'Wrapper/Client.lua') +MOOSE.Include(MOOSE.ProgramPath,'Wrapper/Static.lua') +MOOSE.Include(MOOSE.ProgramPath,'Wrapper/Airbase.lua') +MOOSE.Include(MOOSE.ProgramPath,'Wrapper/Scenery.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/Scoring.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/CleanUp.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/Movement.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/Sead.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/Escort.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/MissileTrainer.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/ATC_Ground.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/Detection.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/Designate.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/RAT.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/ZoneGoal.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/ZoneGoalCoalition.lua') +MOOSE.Include(MOOSE.ProgramPath,'Functional/ZoneCaptureCoalition.lua') +MOOSE.Include(MOOSE.ProgramPath,'AI/AI_Balancer.lua') +MOOSE.Include(MOOSE.ProgramPath,'AI/AI_A2A.lua') +MOOSE.Include(MOOSE.ProgramPath,'AI/AI_A2A_Patrol.lua') +MOOSE.Include(MOOSE.ProgramPath,'AI/AI_A2A_Cap.lua') +MOOSE.Include(MOOSE.ProgramPath,'AI/AI_A2A_Gci.lua') +MOOSE.Include(MOOSE.ProgramPath,'AI/AI_A2A_Dispatcher.lua') +MOOSE.Include(MOOSE.ProgramPath,'AI/AI_Patrol.lua') +MOOSE.Include(MOOSE.ProgramPath,'AI/AI_Cap.lua') +MOOSE.Include(MOOSE.ProgramPath,'AI/AI_Cas.lua') +MOOSE.Include(MOOSE.ProgramPath,'AI/AI_Bai.lua') +MOOSE.Include(MOOSE.ProgramPath,'AI/AI_Formation.lua') +MOOSE.Include(MOOSE.ProgramPath,'Actions/Act_Assign.lua') +MOOSE.Include(MOOSE.ProgramPath,'Actions/Act_Route.lua') +MOOSE.Include(MOOSE.ProgramPath,'Actions/Act_Account.lua') +MOOSE.Include(MOOSE.ProgramPath,'Actions/Act_Assist.lua') +MOOSE.Include(MOOSE.ProgramPath,'Tasking/CommandCenter.lua') +MOOSE.Include(MOOSE.ProgramPath,'Tasking/Mission.lua') +MOOSE.Include(MOOSE.ProgramPath,'Tasking/Task.lua') +MOOSE.Include(MOOSE.ProgramPath,'Tasking/DetectionManager.lua') +MOOSE.Include(MOOSE.ProgramPath,'Tasking/Task_A2G_Dispatcher.lua') +MOOSE.Include(MOOSE.ProgramPath,'Tasking/Task_A2G.lua') +MOOSE.Include(MOOSE.ProgramPath,'Tasking/Task_A2A_Dispatcher.lua') +MOOSE.Include(MOOSE.ProgramPath,'Tasking/Task_A2A.lua') +MOOSE.Include(MOOSE.ProgramPath,'Tasking/Task_Cargo.lua') +MOOSE.Include(MOOSE.ProgramPath,'Tasking/TaskZoneCapture.lua') +MOOSE.Include(MOOSE.ProgramPath,'Moose.lua') BASE:TraceOnOff(true) env.info('*** MOOSE INCLUDE END *** ') diff --git a/Moose Mission Setup/Moose_Create.lua b/Moose Mission Setup/Moose_Create.lua index 23bf446a0..0d39f746c 100644 --- a/Moose Mission Setup/Moose_Create.lua +++ b/Moose Mission Setup/Moose_Create.lua @@ -50,7 +50,7 @@ while( MooseSource ) do local MooseFilePath = MooseDevelopmentPath .. "/" .. MooseSource if MooseDynamicStatic == "D" then print( "Load dynamic: " .. MooseSource ) - MooseFile:write( "__Moose.Include( __Moose.ProgramPath, '" .. MooseSource .. "' )\n" ) + MooseFile:write( "MOOSE.Include( MOOSE.ProgramPath, '" .. MooseSource .. "' )\n" ) end if MooseDynamicStatic == "S" then print( "Load static: " .. MooseSource ) diff --git a/docs/Debugging/DEBUG_Add_Favorites.JPG b/docs/Debugging/DEBUG_Add_Favorites.JPG new file mode 100644 index 0000000000000000000000000000000000000000..5aacedd6bcfe351e0c0fe042760fbc3ede57f931 GIT binary patch literal 35689 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 literal 0 HcmV?d00001 diff --git a/docs/Debugging/DEBUG_Breakpoint.JPG b/docs/Debugging/DEBUG_Breakpoint.JPG new file mode 100644 index 0000000000000000000000000000000000000000..5e02de2f3b2fc2f7c557bf3760d1ccf67a4df090 GIT binary patch literal 32843 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 CTWhfZ literal 0 HcmV?d00001 diff --git a/docs/Debugging/DEBUG_Breakpoint_List.JPG b/docs/Debugging/DEBUG_Breakpoint_List.JPG new file mode 100644 index 0000000000000000000000000000000000000000..aa7b53b827949f7293da0a525f611ac4eb14e1b0 GIT binary patch literal 56963 zcmeFZ2V7LkvM;=lD5!vd_UxTZq(sL`FWy3P3@mkq~LUq~u?I0T2M-3~!PF=!koF z5P4C=1(0nbzA%1C{rvny;3on<5%`I~PXvA<@c$wL>aGx5DotZsDl-U`Cgiyp1OQMY zk^iPs;3IU0+(?w)(+$y4e@i3t@&G_|^dIRz^b3rXUoiZsU;MwwNk3`+iNH?;ej@M_ zfu9KcfdD5v2cIAZhad+#6$iT@BF!!U{M9`GPzPKA2w)3P0h)mE-+s*y`CoDn;5qP1 z`WFib7Rb`s*D%~EgnU7MSDqzrIoCwBShU(NyF6B##F$JPE7PJrm(x9JJcQuaW1q@FQqMlo6D4gcv(Ro**vKUxpe%2@40i#&5&V%FDwo z%=RzJ3A6nI#t$9+ukHE23oTJ$GgCp+U;1w6`1j`3ArAk!(SB|v`VR{B-$_M0`FjG< z27&=^-@Yx(_G9z^h{xaVAovea?{{uR)TH{~@cG%uKLzqnxPHR*Pa*J675>RxKjHeP z5csDG|KzU!VQ~GS@j`47YOWhXpS_s^Bms0(R5Vl+bTm{n40Lo1Ok6C4j)6&ljdKT= zh=7Ech=7QYl!ERdDLE}UArUnzH7z{@6EhPD6&n{DBPSgr6XP#0K|;sCz`Tu#kA;QL zNJd1)_)mXsngCo3BzY8BWF%_f7A_JpF49daK#A~Cq9VMSzc@C3{UF^!MnOeG$GDA& zg(y&t1KdJFM!toDjEahaaA_j>Af5v#xTyCZa!8=zsT!kGJK%HrMx|lUJT7h~P#f3> zahW*!-Nt-CNJLCR`-qO7fsvbsmycgSQ1XeCw2Z8ryt>9SO)YI5T~jlNxrL>bwUe`p ztDC!rr~j*fz@XQ`A<;2!W8>oAy-)aO&5+`x2_?#twMYoW2<5Ad2b+ShPgW{#XtB^R3HgMb~!>FYaT*AH5U|VT%7DAMxjs zKP&$Y!yf?p2^jp*e>IZ?R#iwd&OT&pn)e40qr)#U{_n#(wvgrRLfvDDCgDzW$r}La z!@ZP{75IqF4IoJff8u`w1gGz4HXd`pmSx4x6M#+nLc<^OqCXb=aPQ;)^r|^VSkAH) zqbu)+%~Q?ad89EpY?14xHv0ekW=?1W{fo0xtMk zY(L~F|5WlDy6Vr`KT-SlbBp#_>LGjc4PbD11FWk)L#?WC#cX)U+&Yg0BBq01)dyq^>hS}M#wd8E!tg^9IK#drZGen z>dM|

m)1o0J)ketP+MkN-KVzCd$(k83olhMyfVU(D);edvYP5eX~TvTYwLDW#`v zVsT*G4ZtEgWW5D9fNe8bA!dMt-mQ(8qSp7k8){e{JR?=EBy!_DrMweZH-MQ@B>87J zj5PSjgH4?L1_&(ADfd!%SG3dHkd~#yVuxdD_kJbgJ-}tU66;v|j>%S~4{#mitN74% zw?`mOI)q~tJGo6xbyIq@W9u+geyxu64Qut1<+4i0r!l6=P;kS6W{yqv`l+Wyi1YaIk}>|bxlO`v;tBrmiS_xg zTy=N@R4ceh@6ISWQnFUSYi@wZ<@}drhbJiJ^^4bq)VDg)2a4@51)6|Di6g_= zQyBy7W?kns3Sfns^T$xv8$gI6h-aj}F0$Q0SXFp$rKND;X_%jDwullEKe=y?O_#Tr zn^)F{A?7+M;dnmLM|I^ja`$I4e6{szDh7y}O>(b7$s7Xs^W5O92Pi27!#qrM+K?fd zkhUX7AlPX&cUmDi^l@7%yO8`sFyoYijKU27h8eo^Sb@LK6b-IrjzTJfotb)d6*fuK_#({tcf@o z()!yPx@lghD<=KNmz+JD33>@V1Hs7;Jr>p5S|?>y*Jaz3g}=W;A{Tf#K zaaegRst;SgVCr*zZ+9Ftd;^rkJ)Wf+u`8f) z)^C|zu{FD;zO(Xxu5wp=)0%op{&MPo+lm$@h5(0Vn1u~$H-D7RYFz!siSGR!-!aD| z_KsZ)s_<5glVw4vMRz-evVkG+4e-iT3Vf}qc#dm-Fm1x`_B7w0QNK8>-2%NpukpaP zB<^%gWAq02Yzr%1swsN~mKH19eb-<*L0w8&OS!wmxYWBfMDS@{uW$zj9zS7Z>SOcP z%G0%}>A{)9+L2}v1iw+F?vtgJC4Q)0;ofqwxzgE2ly?gq<)w=#*%seqTdM2X(E6?cOLtd8$3v_kDgwGf<@91cAwl|&ksWLnHeQhn-A5!=*4>08Z@)Y5hv{Na1?u^7tH)zVi=L|53vBfX z9dy(?INU8LizigeV1E*@94C#L{lP3+89dD$-Pl*uG|6l&XSY(nQ7E zqV-_Ems==3LQk9l$Jm*@W6gukQLKRQu%5nP}20%#*wwC4a4}p z2joM9XdbJy;Nra(C)U&MF{(lOaU(p9B?jPrtGj{0D^Fg`VP!y;n+-XttUM{ zpV!*hZGAr^oKQwgCW}l}0~gaps5A`EgHB)F=Q`cN&LK@$6gIY`gzVjG*2VT1*Y8k zDSv0{-0&(wKfjl)wdO%JcjS7_XliyhPEW9vb9BkQ_YdX1$}A+-zS+Z^m^Lt&nCm$p zAJbI7{V^UTta(I(V=0s+20&5Jo<0d->fNnVEt*;9n$guK#d<@`!o8I=mB&!)^={Av`A#gR zG)HJKwmrrhjRV%4^oh*`NMAi$Dq4PA#bjnr+-cggg1G1MtLULF5TZArSTaY;4cJ!J z#V77Wcw>>W`j9nKVxAZOtIC+KD3B54t_2BmD*Db{IpE&%SlkWJqPXZagQ@>m#AZ7J zvhbQmGh9e}T-o7rr@4~#F<%@KvekxP-P+?b{joBy#3_qWP#rCI_q*jdjJIFcX5M9n zLRBz#$SjySUzm>O#e+TI71zk$uNr$PB2;;LZo80|_LB57mbT;C6OTAl`40P5Sq#yP zRvX^4QOrJ%gOke`;#%YMb4z}iZ)wnzAD6S&>V|w9e;99)EaVDer-TeGwOn+ zFFHLwM-{j05{&hrvZ)(~t9dcg8L@OwRTQ`iF)|c)#5{?9vIVkDiydBO7r_wuD(H)9 zHm7(RCO%R5{q;BDyz4{dE|GS0nvG%e^1P&B+QXBr2>0|GU?TTJ5fdIA#Bn9Ra*RdT z)2F;B=J_J-s#50_<}~mMDG<5H8rqO+Ruwn8ph@~pJ5YSeA8@EvLX(;2xUh&A^#*$^ zbYw(Nc}nnH-p+i25-NEQj~N5Sul>^tLsQK%uTqheSQsO_GA-xOCLI&b##o*E7pz zIhO5IyIqBt%b|w_kxUPeymB`aI(Sb68sym21SX%tW04;*Y1?mlbjdQqI`H?S5JHEdB~Ep%<&EnjL=uXZ}yHGy%Lr!|j+ zfex8jmfWVBo5kR8PQQ4h(Aj2+XVgHWsycaLe5&u#As{Nrh+avAEo`x(_H8m{l|9)zBZUqHV7$r zH_l#22)hzzv1TF9$UTq8EjwVWi$X_@0t?BJi}Uk~?A!D_rwSzUe&`5QV+c6T!7Gz6 zlf9$GLgL5?s5P=#PY%V+4z*8Km;2FsZ;|SN4!^OUaq2vo4?$+*<*T1?Gne6-eX)A2eme1LGP9ckSah0ngrUEO`kz6KBrjd z^JG>yKl5%4BPl5s(!0gWFQi0t>z?3ou4_U{N~Nx!0kfL}d2x4UfE>l@Q<~fI9GJOz zzEx3G2O}yt)+%~7d<6uH2DQ+bKJ_l?uN6j8ob*HNdaDi3qIWH$J4b9+rI9y4x3VdG>}YHIk@K_* zBbTzIL3)){+^A+*xPS%5Q#s}Uf<&@gP4_>fWFSXK4rXNUvMkh<$4%}Mt@)X8bmQj| z>&rH)VWZ$Sqm^*;ix4j63zm<*EU{9PL@PVeW%|nhKE3w!)h2;7tv|51$k`$Gnof0{ z;Qb^2tS2eZS2$Mj9Fti5c2MY|4s;&0xW z!nsVOfh+grOj;1_9%fbk{OMoTqPS64voKgS;!1QJPkU^onvk!&*E}ryon9Lpz*cGW`}WliLa@NOqxu4q8wkS z5AiRJR@kuEEe;7Qdaw*@Nekrfj8KrunWNtUs4ZVDO==OQ=0l>#B^CX zvQoV@miJF(m2SQW(z8gFAFM{`*)s2{oNoXv>ivOK6))#2uaQTMZ`2QXk}8VzF&0Xz zv^)xEU)}1zts1Wy?OLfUKm6g&f}6dw1Klos*s!BdRGAAFpZdw;`wNX;NrS;UCQjW8 zLPEY6xZ>IXYdIgQ?x;HjLjRA zJ7KLVJw?8~dmp0NW-lM(uXUysCb5V$gqD?Ur8^RKJ@qwnGR#onwNDC*G<&_RaC z+e9%{NrG2-FO_24;|5Ia=* zza7nFs+vQr@>$RbrK-Bh(xBej6n>iNoCYmSJ`T)ux@r(06pgA-Q^#mXWL>lBpO5RF zP=@vBy_*G6b-;4i2RV^-U|(Up{|sCCvdzddzDU^W(et&O>kDo>>`6%rF{%FzbPIL5gKw@ zGdg-P!3tpt$7n!uo^`^(H{0+x1T#s7kk{mD8*f%cqM10vm|?Y{c@ca?Pc04HgIWo7 z7lurR6O}k^B6W(xF_P1Q%WeRH5jO_nx#-({*x8H8$vf9}c3THnFSM>$JQy>W@$ss^$hgL(Yak08(VY|W`~ zLikv9KBIY#C{%Onl)ox}kI@iYaq&4lhZ(1$EfxT_i6_DQ&F%6<1)C2>Yf=)T`zk6? z6P_epuZGFn1#39bh^`=s%}cIIp%v7xydv36wXE2(h_&1~Zqtx1kGZ!)FGZ`P@5txp znpC7^k3*tX(3XJpbanNcDHpGB$MraXWauy?9DX~G$`1*h>X4+Fd)<*ja-#d_jyGMwm=p=P*I+Jp@>H6>$N z6*j6MoZQN|kf(zWkvZwik-`VlQ@Ey)Yb_iIMnVZ6%x#*78HjQmMn$#TGQB={k(e`Q zt>vhfD*?eow)5f6eOUR%`aLqe(3{d*^&DlP6dztXlkir0Wm^wT>4BxAG7OAyqjhh| zPKJ9vpjr!mw->3j1)xqNdyVM#t zT+h0}CMmwDZP7u8!u+8SOTRTxh0XXv=Om=_sC+dYRi{jBp8 zuQ%GPJa?HVL0n zGQ7@?`6d4FyJEJ*SsNq`Y4}ctkHd?(IX&VrKX9dqIg>G<>}t7{tfV} zH7cZ`g2LBx`_gUb)~_giPW$h+M0e9ngSozNJFWG;3KUX% zdQ|mjI^|k|YPE(=k)Gj`F-cf&bGo$LvcB~!FjwPcl^jp5qsxxH+;`>5d+=#+An@(j)fXD!^!Csbx`1wf(E%F4+$bWa8MP8GAp zxx;ujv8hE$l(XxUUZ^Hz2fSPpYlYp5Wq+k-+m*vdXa=2_ZH7HBo$M%ih%BT{o<-c; zF4-?1czF8covwBpZLQf{;AL@c;D(!broFlRq;MlV0{y{OS@4zdA%dqD=B@}38i+m8m(8p2m+ zHJ{zLD}Ap@wnXEghZHl$lcy*3))U%oRiUe2|4Pd~(qQFl-g{o@=^ZWe6~7b#vZMoj z^JH(for%-u?$ckX&>eTl?Y$yk%Mt{=0j+{5+X;;)PS(T2E>bn=Zh4av2DJIzjzhxc zQnDr$1#+EZE+MNc_*P1305moI62X83Dwg49!|y1Op^kNSh-})IApZ)eUAiK6osUlu zUodFn`H6OMZG_6uPSL|V#nVqpJ~;Rx1JXVhxv>2(OT%N-p~ih&v6eEE5PoCXG^ud@ zVMgjZsK_sYZTeeNO8oVm#8KROTB_b23l_zL$qHt zl$uj{B5{B&@7ZYSPjipYm_|#G&ycd*8DNh`P79QDR;eu1{6Z9Z5$gYK@lsD%Ig_4ftZ649yFZNsYgA2$Vls= z#=a-(?2IQGF>p!ExsyFUcmO$|{SCG>X!rd*@dl8t$F~$a*xZ>P)vEnVu%h5`ySD+fLtEtZV*H$Z^UC7lw& z?dMZ;ePOttb7pWxS!V)kQOJb#cf;o55iN-=&<-}Ptu*d+BT7RNeu9m;V{C*st&s_i z5Bo9W<-13ex*xq^cyu^-wt}#?M4Zbx7hPP~T_SuT3t;Swjf<9X-Q}G2U9G7}gyL#4 z1?vxJyuQ@6k_fJ*5rf~?XM(=~!>=08RS|0*Yb?T)%yI*~FuY=tynHYP_eNy)CI_zH zAo?Ks0D;twb+z%d-q5y_Zu+^KR<+#j$z3%*sd3cIla-PsffW-7%F%G>X!gOQXf)Bm zzxSw2tQgw3)-ngbE}$H*m^)gqLo_fNuI+Zu>XZx7$sZ`C{E?FXj(Y3`Ct=izXiTIN z+Ie6Mb7fW~>1p;3N`qMR_Y3_O*Tb-V*1a1bq%h{MiMMi8H}2)4?$`dd&7wIw>hXZb z-0nTCqXLJCoRJ(T+Ji^z$3e&52HRciS0YBuM&^{I^6LB-J}OU-!^(D2E>8V3-1G?B zbG-ZwkczOGHL}48(td#468^OU@dOKYd0KX1JS~tl-v8&)_`FrMTQrW!_$+gecpITd|cZqN|2;*Hk5*DX-E=Wd!|85p)WSHWx@qW?LGP&ZRG86HlmwBRzA$kUE)zxCLIpL5ZR71 z6fe!xzs6%Fpum1LdCwF}ZrE9$M)|?F*g^YX+6;WVFE_{z@5xO5eYt_Ue|_F!_PCytLmy{m)mq_vV7a_xx4Rw z$uePNVZ8w)26hs#6s9I{Q$6^crl%|H(eE;tppzrDuYnu?nAd-PZ4me6f2=?MSh0FX zOT}+XGulRrg*c3mR{oG{Q)H|7FL^!tP-=F$J3+oZ)mXTb{89Dmj;SO`7m!gBQW6tV z5+H_&XVUk`$|80|J||&edGa>OlEW|Ni(|?kAo*js@>Vmw#{1)3%lq(lM2~&4W@{V& zy4-0oVQEwgqQEaUH@AOf0()r({SPnXZ%<^DI+p1M`|Ck3f9WMaRvsU0%c3G9_~u=^ zG+PkzR^Q&xmhORj>Qm>QXgNHX%c2SFU^-&7tnsfzLvi${QywK7CxI)e4B60VB^`ub z@WBz|__8d$H9$Y zM}s*xq{@c~vG77z?w03=5alqDL}Gw&Pf&1tzRFZ-)oK2JNtEjAM1(dbiYRlo0c*+I zB=JeGs(cz3$;8YmfeT19pQbrh8jG5R?03aj1~XgGpDnyyB1YSyuH@4a_;dqw@d5&M;fvG00o-T;=?B=lygw25>jK++&xnt!Sb3&IbY>+) zlDH&E{CHy{)1HS~h}9CUjh61RHFVn^O;5l37^WapJ5PU-JNcp>noIaV%XWtXD;-T5 zI2O`I_8&jy-aaE3*>=9np3$4l$wMe-gb88YPrpryA9WNb6+csJy%WjhtNzsm^f}`V z=%rvFv7N3YpPOn;vG)dS4WXvbNk{D(a9en2Gls@g?bDCntsk~61kU$Jm^KSCty_jK z9!*5V!sBS|U#p*`vMMmNCf>tVx<>&Qs0@;-ZLF;vW?3ms0{5FN=(=5W2kY}FsS0t1?A1ztm1(9!1TLtkakP4 zqeMTd^!EK~{O6?G&Z~W3&Ax;Vy!yI)*AqBiU;ihJd3(Wu)6>wM+OiayzB`r>&F=)A zS51X#%4A@f1)Y=CAT{3ox{d)1qV9L^V@uL^BO(vKiZAgCYkr@W?IMyrrxA1ihB~*y zFSeFE2EV27OGMap7W&l@A~>W;4tAc<*$5zuRsxWtWeLFY zV{AMRVr`x46`s=PcAvI|1|#)Ll7(|}bnpv@(<6IbDq&x&x!eFRqi=u%ZkQFqIxD=} zxPRXe{wU{S@CN9Yxd9r&D4ZLQ1`zsex;S6fm?L_`s8zv2sN|*hbc*MZ`h>P+9A5B3X>If}?}C#9%8^16!R0QN zvpG?pfM|KV&0@9PO4a3q_c{G`xKXAxny+Pq+T=@E&FgyGa-`bsQeo1SL zPK;b{{pV2^>23?%V?tGpcB4RrtfzqD^&d?6q8@;~-uNZj;v7RJw`GXhM906r(&)o+*_D@&`IwB~FKvzXH`P!U@@$ea2+n!@l#u zTyb~bs$|m6PU%S=<)l5VU#RE`1+l3M&VBJ41FEvDG}pL?C}n38J=J&R09}2sorwyc zzbAcr4Y-dwG?JW7lH@gAi}7{vmRu)4nF|j~-KgfEa8%}{@JlA{Vm(<|;-+roO_*TB zuS=tK;lH}{C{_;R+ir*1{W$YRh|-7V!%TxNHMvy-H292=jx$0w<&5PXAdEkEIA;;| z?cYWt{n>{y&ls?t&Sc)}^!i8AvpXQXT8<{-?pvM+Ju2}}6OSh-*QOw|)08-5b5&t0 z3QE$_eVClT626Lzq#E3&{DFIhuk~&&7pb=GRYrn4g#`q&2tN^{ZTnDy2KmDp874Ra z5s9&FxoK!RycFnzd`N_UTTwHm8I|O$MJ;Ry#meRpPu&d9Z?oM1crvF+lt+DAh)85w#32D2 z)H)fG^I&HaHk8$wUE$HNIF?)$9HJ$M>-o!S9w=Y_Z*=NLfUzzlx);__N79GKSKNGMJ=Q9K4;*4QH=gs?uOq6U%Zm_PrMrOWAzcS z-;w`yXf1E8{i)ZMKTaq0zaakQpI@J*@NU;7Te$o!v@%}Qj5+lyrDBtL+8^~29^JWzU{#`x6@6s_lBU{vXg)uC}uNf4=dIcl)Xd29WIg?IK8)g^q9 zgE|OcM{)bAI`%Qt-Bj(Jbc5CBD21Ji*W*fD8@&=A3?#G8(OPylD!!mb*Cx4QsSeD2 zpDxUu8~t)6wb(26g_^RGd9bdUnjfDFm9o`Q8cmjk@o+l2Qi zs$I30%+N`@KfH(81_&UQu^T}CxSOflX6jj7*CNyF?{>jo3Vk@~!PeL=CZ_Om*o@d< zvZC0Q*7eXe!!V#Kh5vuTg%q?Xq%d{OyE>*&dr8n!tD$H5Zj8o(;?m7Di+|aLXqIw6 z^@>Iip-w<%Wu2=(w8oWGEYgvRN0PZAmGG~Teti&j0%_4@SvzcvEBGw4Y$G}P3zUR& z*=RnXV?IipsAl(_OV|T1P<)r$WXG}@n&ur&5zcg;_=P#_xp8Z?xy{nn!FS&8mI5Z4 zQ2gXT_Z-pC_}2<;zKInV{9=Jw6>Ew3jh?(`ppT0c=C(d`JCD;GjP48%3vVy^m>S9!7C;3X<{h5ApNJ-ofp~n~93V z2cTx<;KT2*iOe|rmC2=^OS!{HkD$WYLt6E$bm2wnj%b2FARHN0p!ed zd9}i>YhNaNSHf04#e6bYuedLgmzgxiE*8r;on9CDayQ!-Nk|Ea%2;qsX{n_qU$^|j z;GU{qC+*H`T22!y$)e*&kXlroI5fgd9BA2BQuKtK@-&{UT(zI8{@$YVX9}-{9YXE$ zLFVnf6NNYCL+0*d+fgkvb+35UAC62&PqQMU%^$k+7|INm^PjMYj_$TLLo<4v7-!zA z#x3>C;!vSfVy?N)SJ8wut=2RB#!B??wn~JR@*To9>P8SD;6rkCj%+aWgmS~pLWRA( z{soLzPFK{)H?n*9AjLud?nwTaAS~+c@+l_{he%aujp>kQ$))36=f?3-gvK3zM7bdI zTi?|fYHPp4>F|oI_}m)E6u@!;y(@K}l}Tryh9ZkmhIgLX^FiAl&s$Kr7FwtcxP*CK zs!0#IV1dCE#R!{7LxUV=r#*$1l#V{GtLaOP=&T4sy+8W;2RDUR;x4Uu<9tSL>nYKYC4jikBD&1yyU5KIsR&biSx}Yzq;}1B;B{0DkQDhxO51lG_jYRj? z8rA!3hHij=oEBL=cGn16tR!8Sl$am7&^G2PJep#w5U_C z)pX}+?Yj?`ieJh?W#{ms4_>;@5(J8`RZ2o24mJ)Bpzp~ei%%zHv$Xx1INkMMXN1FE z7tcG5iHQBy=pWqtJfF27MJ{i>rhGY}N0&FkB}>W;;zr&j=Ym^V7aRF{5_Hd%!&U+3 zJ<4up8%^W>le6f}%7`rV`e=CP&Z8r7NU$1eqSeeHL{ogc*@&a#tLF{ykFBtX6$ypk z0AmG>9S8b0U%E49zF1L&lvt^|2hf%e6-;u=sc%0ef2M#6R6Wl#qHt=?V^~nM+h%Xi zYQBE=;%iR3tsjKam`jkzv@0eQRm|z3gKrb@$%MC%vCxyDw5T)~C-s7ybTet73_40^ zc~CRUXuvYm;?Fc_cj6q)WQ)=`szQ7&~QQkY=C7;(5GaFOQ{y{(NvT8J#SV`hs3n{d-~49*5qQ#`jG_Z>94;lmT7Z{YIgN6Jqc-*;rTZ z4D4!7P-zmYVer#rQ{nD1)I%IKL)s&z&&^L2A8byJeSw(`vGEW@Zdj2gMT6U@+m7Y1 z#4|I1NUp)NL^v77qh7VnF+HS!8Ys`OIw95KD55aWNX5wps}())>6vf+fo#QUfaP<8{*)V)yr-McnLkT z;K_B|nRS0nh1fx3%V>d*yv<;1E|jMD)$!I_8YxvhB((L{XJ34jl?IPLf13+?W@_wM z6&6}p+{Sh0Z+11&G_}h#%0r2<{=L3vqTEJy@53}{S9LH*FFfc@hIv-y{z+J7nd@n; zu^;ViGSz@*Qpf;+22i}M0e_!@1AFEP8#e&@RX^RZGt|m_n0cq{y)8{+!{-`81#Sg0 z1;S`@ZNj@%9#8f&$il7P@3-Z#1()kf?|oT?R9Dspx|>E%&N6-OYf!nDS`W%S984kQ z2S`qT7leNZ_Bn)H0fUd}GQ-io65{Au8xTitYR^YpYMF14(RYKDayh-C#VInzc)S)A zt!===;r%SkB!g5(DrVF21sGdb;*?q5T8Q=Yclq=OrV4QEMYR}3p24|*8=&W4N4=Tv z^W^5}EJf*qiZfT<7iRXtHmC2^w78IKscL0j>NIP1+>!0IK9_t<@^o~;*=7qOn}x-* z9oO+~*S$Zk82n409aot+BfMo|hgW24 zlYg~LW|YC}Vf}~Ox~`VZZ?5HGH4G<}zl+O1maRqH@4L5}bHDZXkHrZo zSQBwfH!>jg+N&3F%BWrUk2#>R5&%8Pvy6<+v*YC&+mjK0z)g96oCt4tbOQ_&Ns(Y* zc`71Ia(J-yv5zk~m>ZW}hQ+oJA&uWm3pSfe5Wdhc6~y8yiI8vMmANb5-kmVmc(Uf@ zeO=M9Ni`~q#%9zO?I_vnb9B3pF~1ZcZyU5QHN!hRVeOe~9d`@&zHX=a>s<7l&Y5;1 zo_fmfh*$?_^;};1HJ2h(E5Vc)mdwoLET1aD(2#-_^SWLrEV5Q9hMP0f{SEs&X0+%rU(dzm~lxt-BPrp zR>1dn6l8}OZ(?jIf4CJw|KECHYEf=Y?Zcmu%Q?X78?jeZzac#PW`UJR1|To2CHF;9D*%tAhzU12pk7}^}S)6G1mjX=-lK| z_-aJ|J2ohqB5PNn?69%A#_#ygivN7tP6Z|5M{Wv3hl?PXtSGqg*k(YSD9-RuaFg<+ z1GdgFdSWyI>)6VMjXgxTzT3egj_Xf7-y6_Xj4TiB+OoK)Lm+nMgU@|An8Wc?8?R`5 zhf>Nj7lJdY_6rl44~0uaO1OlIncKwUu z`t}#l`JU|XA`Tdr4i&I^cjtjMj?xdup>0UZp%gxhG^Oy`x8GsiR1RKb zLEXphQ&mK$V~F1oZ%IlxmZd&qS$gBuxst7aNLFfO3OeIyvJnjO=MloH6=6~eIZ}<) zF;xIRkmEarPRRg=9#>nX-wFz!Ux}GQy{8JPeKj8|c_4rC8lVi?ML!@^{yu`>f5fiS zh5H65Fg#N}&S%kTX`HO_pMlxgxO%;$P)uHnCu(ZP@|RWGu(TU^W>S1u7G-*x7vE~2 zHA(Tb$GvT5ZgwxBW2lbiIyqYkp>y3vt94n4_D;;3IjAIBaXnJbPK=EUl2nPPjp3>(O%-QzYw5Fd<@3RvYaQpLdP<4w9;97W z8PhAftDnOE8a-~>AGs2}-tfR>E?{X4`?P)q9+4wMggZN#|JqEl51Ia9(6Gv>7Oj#J z%iN(L+m61PGPX~}T};Urq*kA!7gVmd@00CI3-o&~Ua=IoM>7>T6nJym=_*Q18o3Y+ zbw0FElU|olvD#sazd%V|A~xuP>!&o12B{ai`Al z?*k`UmI6Nmk`k z5^cq->k>sb6YSZVE7%xa^Hn+>6Blf*db@p^HMF!>{`AVl*PEk~Ct-S@xBf%cI)GR6IrUx>3K)KH67Gyv6$Y zX|H!u8s*cB7vB|lqs&r-_bn>gl3KAWm*NskG48B;oP^mlfmGTg4RJ~hwNHz zi3$olNB>j<5hkqy>AId+86qjxj$;-f@a2p8+>J(y!yBM9)U;yysA8rx zy54~%oU)&G$Yu-=TwmIq!}ZSWvNKi<=`1^<{_KSyteJPsd%ALTZ@08^-NYTNdjQhX zUD7=_n?)SgENj~2$ci4PtnH-a6_FvBww}y92}rtYn%zz)Ts}61rjs{8jQh|Yu$8mtq<1NJj)=JXEDJfB-d3<6Z zwtwhC73SjINKM14-L?1Z#SB7l(14{5o}5kgBuE!!bZ1&)VW$+Abu-pj5Z~e7nyg_w zV!K^m)`*)P-EyYcSOFDPW?fS^X;V&iDy1TC4AL9>G{O=CujJ081MOW~`XMCzIQ_>E z;J@<9{8gF{$Nwtc0RpfZLJxa3cWn>5Mj1&c$boe*?!l|X;C@!^&UD35e|CY^oZkQ= zbeA8i@BUzA8*7K>h|S`&EzxG0en59X92_ifY zw%t3FCwpx000KbnKV=1eA$B4MU(eEHEm%zEdi*S8R}NHlSl4WKi!d^qEXf(!zmq1@ za${^@Qx{sljk!hMY9e(HFv8di3F~4W&?cPa_*~u)-8VXVsh)xt9NjYAy+Zle5zWT& zw)ds`%J{)W2&tL>ooeD{@-T8%ipQxZdGHPR+fBr@)ot8O-B9{(RqOs4wehD4_;0I# zky``O!W=nIX$-l?WiwB&TA$MqAFrnEUxi`6d=81&qkRqe{wibiSYJ!)O;^d7XtNcF zLgTYf6l5-Gc^8D++)nYff#TZ<3&}$}kNoR~LH<_`5~orT=0dwDG3{idUY{BZGq=Z1 z##g<$*g~M*G^lN{kWW7EXyjYmoVeFOaZ3Q+-j06Zo7_j`A160)ABNfDxwbf!9n%~U zAU2>FE?2mn7Fq5gi$n5J!I#uc`5gr#nvxw9siQR_qHTA%l>NE}cqMP4NL(w|Kiie# z_>~8>b&En8OUlv9;mxCayf3}Cgv28mN3AUQ|@yAgaFP|i+>jZ2flS5fVqJ@4Lj z8v?^x1Qu^!WihQbo7V8Py9iYil={F<$vGAJOQxrvtISH(d96G@#hO0ST+b{BmYZ|J zmN^hRt>37Cw~juy52%}(QfA@bNlNj^+A^Slw^fHzZbNl%08iUFQ=8S?qfopke=xT? zL8gsfR_3PIWP+#ub@*<-15Ib`o9;-XrP$7V%Q}nI*-V7m{^FtHAj*-!7Yu>6MK|ZY zgbmB|Y#t`vmAj@I@Qz|aG2{A%iEG4}Xe{Mn zk?aMTw9NG~MC>_o=)P57zb!vmDkL>3Rsl`1+upjo8&L^4rcmc2?jRN*c<;5uRy?N& zMKHwLYr4avqD0j2^*Qq4-DNE~sas_QHnD6)@Gqa_JWj!hVIia)l@Z#u)w*^9K=W-K#m=xJ=-N@F`Lv>+>hH&mb z4tWXsldts8!RW33!l;sm)(w}@mxNbiU!w`m=EXlY9d7*9P?GolK%}DRQL2-JO>QC+ zlNWD{+3jF6`;2Qus5IHVB!sM^uwwJ3G_puh2aUd|(O-KZf6}?Pr#cWjJod2)hGWT; zwjMK^ihCZgtXe@2pF5l0&pY$6$@<2^n(s`i;PZG<;Z0@)XD3aZNqaP>=Mw)F{jH1N zBUUiMF_*$J!bb_06l z@o)A>b<2uJ%ZQIN8m3vyqg{NK@9Y?%cQ}lX^cw1pvamJurk^`P6|4h2bQh>3Qkp7f zMa%Ru)mV6K2lPH1bnyj&hTD=E6`-ya@tT93Xj#l zj@`Cn>6Wg2#U5IlDo)Qs_pzGiATZMkW<~f~Sb#Ut&VxOW$=5jsSo>hq=vvctJM?V@ zCOsW8-Aks|)d%no&uv{;n7(isY_LC|w6V#Ia5un0Y34u6n3Q0k-*r9K;`TN&+OJQ^ z@yU`S?>$1TDDhKek_X3rxpPlOba;yL!R%dwDW!vZ0jyE9t5RjDmO4wW$U+LN>^_K| ziVi+_y0M;L@UQPMWUtg4mB$KSv`1`vm_^tn!fQ=-`y39}4l-SAuDVtY!@~VS7W!Ki zd_T44VgE1o-aD$PuU!|7qM{;2I#QLUbm<)tX(Avz(C@s=Eh!8pi zsY;dJTSBi1H9&|b-`@M%=lh*=?>Fu~_w0M`7?YSVRnXETn5YvC^nV?eq9_1n9CbbN` zDDec|XSO1E`}5_G!5I}J_iWs-H{ALK5QLOJTzpO5YK7C8gV)p)>yLtCeg}X%f^0+6n=Q^6Gd=aQ9p~p>yN!+G7@o z{of@Mdd%{n=TJ!R+KC>b6_ze2~{N=~cPdbkLrzrl8U2>ZsSv_#rhD+Z5YZ z1h1SB#qGx?u|rR0vIwBAq7`93bM1fObCdVqqDubX)?}n|2xyi|FdiHvK--6=oNMrfme5Vrpx_@&*?1*>98;K_;K-d z&3{ByRS2|=f443BdQU^}oY{-~VpZXoe#h^d^Ix$1Mo%ueS1?*g{L3*uo`2~ZP>pDDO(0M2RPIXhllyU* zhrcd$F{Q6e?fK2C;os2tZ*bsUg6ZEjxz|-|#mqjySKKGt%$kTvfYkNxVa1>!UDG(_ zKMru3lTu&IYu$Gg`0*-Ln};qLB;U;szh$)SNz_<0qNthyi8n`UwYmsA`f`$hXrwSv zOXFp`%<~?}Wa&!O#fEI}Xra?WU0YPy?<^xiG*a18>F@axmGlDrj$d|TSYqAF+CI5t zb6zsze1v^J#*}WbS+e*RfLs=W>}5;(22X0FcCwtNda@smSfS4{Jiu0-0{gBpe2Im> z-5M>WqzG)&$sj~oJoXiM7pGq7)FfBV1G9|Rn$L!?CpYS?Zp48`H*>qCU5b3F&IA4c z-t^Tr8#H45k(*O{p`o392$yvaxPA|zHr!AQm-&SnwZpiRuWkR5%Mc(l5Mh~)Q&^0F zVQKs(s58N5ra1heJ|k!46mGu_6_GTz8^n#)tfm*5ef5!Chcc?!{SSci?HK-tHbDk= z(@Rg^^XV1i z);$aU0w;o*rM>pJthsxE$*Y6Y*r%eWE?=x0XsY){N!x~?QA{lq=~AF)xNGCJ=vW9 z0xVj=|I@ba{Itu^!BS?gTlmPN7E{@nI|uO}XbS1ub0v(*t4NC1gi#UJf)2apb^0*{ zG5zL0{#hV$JDC3={e0JIruXV`#mfrV5K?ayRhec|wS&L&Bg=cNqfK^-(U|H*ddLsX zGLBbx@9|kZORr%X?U&gaRkyK|NRUsRuU*!FaNz2|v-g2JqmN70Mi&hPXWBqZ8cP?K zL#%|tP73{YYWUxELwx zn+dpz5TCYJkh%d=R;jTfhc&Fidt8@r(};*x7-GPkg^qB;ve2E;jq_IX5%{3YGpv7} z`SuyBeQ*UTM!v_n+6;B~&Mv4lw`70GKM1jYzo;)I`&U&zE?x>v7j>-PHoiN!aiNk^ z+Ry*pSNpQt*>Z!PSq51-@05U5?KLUbhf`NiJGpngZ8hpI6&AQFe(h0n`V$v0|BaIV z)WMU+lp<`h=6G#Jtk$Hud^fnEc9`n1Wgf?S6*ZiUA^G1l+~Lp_Td30?fCB;Jg4&(4 zfD^fwjznTyhPANWelFBr4QmYQoX}4EoejKXy|I@ItC@e+%cWNoO&VTBPmLdvhLl5o zzFCU$`H1{2*zz(h-Jrf=hia|^HP~wBkVg!tG`{w0$W4y7E%#%2*OrCZA}kyy@nski z-3^_7(3WO>l_fWI`Y}WH=aBe2Vj|Y38B*tJ`HdDCBx3K%RPQ@}D0}Ks z9w<1Fu&Th}(c1?Zl0sHsVTAeg(c>BH%_Z-`xw2|%IQUIW@`vDqsL9;ax^GF|KDL@X ze*l+n)ZlH0HXrux^JVLOST~DHagE~1Mj2|n{*Okk{{lAu8NId3!4Di^jZubW*}5|y z`!H64&FMKxV6ctL%G;NvB5{)R72{GV2OxH0c|(xJ?(v{$x3t~IGMf1$b@w&jki{E< z4_`}3ZW0qGslFT;JIEccofgcwSFKH-sPz8!4g2)GDrI_fPk~Tuz?jvew7H}E-!kpT z((S`cMA2HAV-)PBq5|5_#E;CbSWo6Rw-J@yPh|azs=jcDKPVW?w+U+v8Lwq$*4jO0 zeYsiTYSmgBwLa68Fc3Tv?xv#bThP3-wGxfkr8rnw7+^or3(QwaZYgs1>hV1$@IasW zbE8ipN9zOQf9cTfel0O#qR9Q_sUGSmnSwz z@@NRJ#ydxyu>Wg)zJ(Tg8>fO*E(Mts1wZ^oNJXGB=GwNRP(;i-Z9vF06KVcNWnacl zWjCi+;YKaiqe~hZg_8qSIE;$c89JGWdp?G6P$-_=Fvtox!jShg`4D(fcD%7b^>6q= z9VnBB3E(Mpo2A_kz%62LkKn0nPzDAOTqVx}(NM%jf{|Izce=*RI_#1hZ}pIco)-5Y zZvohnZVwX`7|!~PmZGsEA`b-RyEx2=Ium@q zzf(Ul65`z(lQqo7>ONWh9mEBZXD{o`pWWg*og6mN7V!6u31>{sP40bV4?yN#DDdKM zg26ID+>^D2A0URPn}eaf!L>B?b%9(i0+XcA_a;6j%u7o~UK_dX`oKPy5@A%*^**O{CXlA@M^pE=E*rJL^^wIY_2V9h=|ScwZ(D;=P?`tmP%DjXQC zI0kQ3eVt*Jm^W_In0DoF!^?E74|jeonkf!`oJC?(A}Drt^J*WcdX{+*CkwJ#X1&+e zSZ19-VFv>V-FUcH?(e7&+srl%`x zhLM=bk96d2s1Ky#xPDlBpp_pMkmicLik-f#Mb5PPp{^9i zT|I&0$Gn~G?KF{y*$dzdB&ryNgtT`(`ot>~P&_lCNA%-7Vk2tAL^pt7?wCl1iE6t5 zuKR&I5Uftwk{MkkWs3HyDtG=#AEvU3^wOfbFkij06jkPJd`1sWOfcxmZqK|E2*rn%VHtD9Oj~~TJWCgzyCMVb>UEFQN$XsgoLLZ1C!WHJ| z9;if}Du9}3_u%{S11~SpUjgrkxrwRIV)!SZ*?$0Tb)Tw6{s7X>vo|arf-o{ji!6+i z5_%~nKq1fZG`+QxLz~P(C5GzgdW{fqkq*|-1%0sM3PVqtu8w$_t85Qp-iV)l=e@n) zk!qf!$`(9UZ-T;e{{j5!2q2Ivf`IFf4Neoxr)4gs+J2s<^Y$t@3{yF!tA^FaGODES zFPxMOb2;*Ts_l6ilM7Jfj3yHniSenDMTaGpK$MUw!S2hjv0>G}5R11TpD@)KcRtRN_P^3vmoe4w6yzJNn^4^T8+#@W z=2+&KCLNS_ecr_U#fT=Ar>9kj0*}_|Z>Op86o*q45Uo8`8!gPr7B zDbpMcRbW_mFD7;s&~5U)Yx8O_J3@F?7&vt6a$cxk?|pUFt$9*yFuL)3+>jaFX@Xxw z2NUqYk2QEo#BrMT9{KLlw_~E!L$tJgRltBu1CPuE3;)OuFlYg}h!JJRv_#XSK;bOem*Hyl5{4_X; zZXYc(F|5|?Yr26qp<=eF+JGwK?Tc{o*peKan*ZjpssE+A^9vUa!;wcKydnCZc*Rv& zi%%-Fi6O&Um^zrhPl1xx-5CpYTOMX#Y~DL+tkpy{qYDT6FjNOSks8 zsIoC^Ni%qK7@Y+4%DTEydAw7E%)m{=+f3nkH!YYayyi&eT%N0Y$~-=Bjd_}5plbV? zNFB~uX1@2*Y zE*{mon1V+~u8dE(g3ITy(VdeI29q?HTaWL^Y6xBH`1bS0b(Nrxlc8>lcg7Uz+K4tU z>}NUPmv&(Zz8KbYxe;r(GlmKn5yTWvfw<|o$SQHTt?>3a!ZF1=t)F(;X8GRoy-WbF zarYB-Z|M39b0q9tQApb(2fR$OZoGQb{vFS)mJ;h`<>x5A<|z6xNMV0> zs!#m`Ps971DaVt-cP12tRouEPVQFKCZ&eIvf=9qdu=+^L+xOA#Ws8o|d1Qe4^tF~o z^6wh;XpdJc4-x34A3)l9M?r!!*KpK+1uaN_p!yEiwJ7ofYc|i-s38H2_OC$v!FdWl z#}sVk0GfErOmn0sWa5zClUN)eji&1&@Y&2li`Y}_DtN+_7$*@EHTyB^6tDO|?$;<+9=nsG! z+&#C-yNL%zA(pGoSmFtsKZYJB3%&`LpeITzWe|SN%yf;#^SE-GMTYkbq%k&RPqSOb zvjLdU-iS8lZlpHFRqAh;RKZhT4u^;?`*n_E3*XAD+Dq>7o0rDzQz3#JW}njr?r+FQ zSj%_}N$Zm;bxONzgbLu~z+mRs*a1PhG|+>d>iwaY#q>j3LGUeUtnp~91c`$8!B|Gd zLDOY;9_V7z!!5vMRKUjAYNX})EGSc;?CLW?io`Ct&@9!9yVcxu^cW7N4G zu-D)YQ!-BxqAt~c32P=%KLUP{*AJ|9ob%jkTi6&szTh1YT_T@`5F-~8iy)xE`froY z_LrJ@uSNy1-}>3+)qf2sNdLsBp~c}y7xf}E!Q>@C-~V2rlxuBQs?l!dJzvLgefl2v z5E0`}{*T+74C+66zlhNU&Q3^izzM5&8NOxMF1JNPwXL}s>$9v0e4P%8juxb-XiSBk zWSgpU7+G)M8W}DCVzlGACUM*-O{tYQYPCr@sqy9c=VKY(9t5)?IhrQx5S~R1!`Vy8 zKKvPPVCy~*2GxGHQ*}}X%-Ix4S{n z$d>8Vi!#Xuj6Fn8bqUfyd|vv#QLm4iL@rLO+Ea*>xy~9T|H7xlzG};KXzVFi%`E^q z+Knz=?gUo2*8ev2zCcxvyj#*>Xz>ld!m=7{=tQn)kLb2p}E{v z!>^0jn6edk`X*%WI~L%W>M@Ykmb5PKI`1>_i{PwJ9SE-JiEFdePkOcAEYZ}y>k~f} z$toDiO*d>Eg`bRoD)&5JNqo0}=Io^%c(G)>yYSQ*^sasyBE{&`j9R;KdIMPku|t_Q zp-*ZTpVWl(>sbb1`Ip`aa??x6RnK2JrA5d-$;A$>B;Tp!n8%Uv}A^NUmBZB1ik)=z7aUWkuoC;>G!9t7?rD zln9&AV+42`g(9Ob1D3Yv* ztOUb;Np3!Ja%Hdbz1kR2a}4={n=y|c=9+v{do6g_>>~4mMu?XxW;JBZEHU}}0e!u# zS99Q0vB}^$v|UaYb>$z#+Lu?F{?fEJXKTyaQ7-oT?2Cu+h8ybFZ!qfo;0PlEtY)j4 z)LT%a`nlfo)D;j+T+0v_%LE_3J7r@3$lw}{+tjvZC-CDFb;s~+gxB`vO)tzJK&keb z^1J_;p8Ys=m$tJwH%jSmtrY&#KYuMb*Zrkv07zE+hZZI}e<5%YQT}7Sxt#GIYX+6( zcj9$Z>vOl8S}gQa8&65p*$xXn>_!XVHn`o{;>aYA^MAJ}KnrFwe_ZloQlFNCxgk@B4bD@l9_K!xv@^gt*A6oI<75cbZe5r(a)3C zAj*KA;!()EprXZc0=?hr3xMElMtH&)W2pU=o$zEju$we!Ox04)h;sLOc3Db_AuIas zY2LrF|6lf@n&I(xu+7VZyzRi6fD5jO@AT{~p^L_9g1ldD8Akx@zi$1$o7S;(E#tMc zco_;vzn#rqTOTD8?IMqIixYk(qi!EirTCss6306O=jYX)bWR^O`UXe9-!gn{3blQ% zsss;a(*KN7d;2#(Jki(1Q9{&Y@5wq!`3si}rdD62>^7O6$oBWbZo#^Pgu=UK>7uG| zVkHqTs5Bh%zfgGoFw`w#Vo{T1@~ioQxZx7OS^-Lnt~7Ic3ZlI=s@D`P?CMOHn7?pj zvx*|BdNY2JLi2>9Vh6jge}X7lsYXddcTd2!=p{XLSKC9!{e#M!hIrjemU}D);>DV) z*%I+B@@MtZP4PdB4g$zmw8@k!&Pi70QW`|Al6_{?IACdzxg>25i#%ohrB(c10Ecj zfb}Kc$jUW9X4AFtxRZVY;CkKpI6j&m#W8s=wPV|~p|%DT8l_Gh6TUQ^d9~O%+Dfc} zjt@JQsqxB%Kwpkk-u)zEVysG)BB!$U+Pxh$3*WBQRCm>?5IvQIMzWF|{{ciK826n` zJ+LS#ss?FXx|+zM*kWR0-b2_zB;}mKgM(?cQ^x4$cK;Oe$`0}CcFdGstEY3~8+{s3GST8DxL*Un{X4zEznRTjM5%2*}n z3Sm=vCQmjh3-qw{5?h)zG=SGTWIs*ed|v)#RY0V<)i02`0^BIrOsLa^;ID@7j3Mmf zDYlwW+mn9))NrxptcglH4M$py_qQc|sMeZ%2E7rK^7prvC|t`=B;kx%jHcC$E+-^b zNw?k+-3xJhr+DLj@}M6n^_jZ&%{*{p2ZUs0GH>O^xa|ZESb~kZxDbmlTco|}tK4rx6Eclo*w(Tc4oHM20W-#rtaQ#(}3Zl<5Nh2A|YeZ1qgWj!pW@bMcY zex)ES6!)fLaoeX(%Qo8R?TbY_qcE8---YJf)R(pw`43cq!iS?KShL<9VH8OLBc3{ao@zcsvfnFIASMWbGTPoJaV$M~_KJNcv~QNTN+4E2;Zt2U#i4 z1m3CtVwX*xs<6n-S}50qHxM*4VSl4H`9fpbD4c@WFq)H%E5j@x7RK~5`&p|xKI?bI z6cqP=$5DH6Rbts!NW(w4oH#D&HBZ2^OsHsv3Vi!5Km4}IZs6uqCy12Eq6`ea?awv- z3J^sL;&>6adI@VU;RSHm{jzq1i|3VzbFcUCyqEye1&GySV6n%{_D0Q7ffB05BKd<( z92#NnXJ4YNzoYf8mi+cMOI`OQ#_;r?%G1rY#W3MN%*oA@)f>?Re$ddW+Wzh)(+p-Y z5iY5_&p+)GiVq48pkYB2rVgz4;lniZ+p)!@Iz@a7L3{RVg&91BkQLwY->xA zBcjt*Nw4!Ms)RT{Gg-B&I1w0Noec+g9%F3x371;M@{2%O<-V|VFMl$+&y%QWD@OHB6tR-E3CJV7WfA0%f=BR{hTeWhU)Fxc#@+HFS3mn? z3z*pj1o30Gdvwbk8?MxrZFsvb+W%h6E}0vZJ4c9|jIN1jns)yM&WmwE`~q*UIQciK zT*1Gxf2K98Xef~$<5reDX__-u6hjj=d>R^GYKAqfPRQ< znanqBM0ou=*|S0(QX`UW3z8QW@*G79a|~^P{XutzN+) z4ELik4=gjtDzLA%m3evj#tR%;cM)43ZdE^?J?^lbs1=a4e#*A>(BM2w7!x)un>^V( z`=orBj=|%}jt_t8o^dN;rRna^4weVKUAHg_v-s0YK0+9|P)7vq;^}))DzKHRZ`dg# z4Dl>(cu&$Y`sX2L?c6eEe^_exYd3+wHcX{oSk<()_1$sqKw|(pb#ivoaGcL-{CF;d zv0&lmfabmE?Q$V#mQn6E&F%$K8JSF<&I15B(VT_vMTS$okBaD}M(0{el;|BM$oxEj z9NHPB32LuDf`p+=(XdEYSp{E6sUWo}=fIm3dV}eWYt=o0ZTY8qhM<9`0<~p*hM#JE z)C-$UChMY$6#2>C3f|qOgh=R(z@ZfLPCkC0blDdNuNTMrIiIte0rDzE#jk<#p@Okt+vbvt#| zXgwy0sOLv8+j30&^V>Kc`9^bfbs6I$=Xwi+`hH6ju~kdL?43Fxk&%>@L4tP`IA0Dd zS;lP)(*pvJ4pGEKW|s!4!2x$Fu}>{)lDiS$Q8vRltE=?HfB_BrfqBysZkqWKeI_r5 z5l@;%3;Zs4%5?V3(A#J1YelYk9IGxiu$VgnEEZ3U%|&${ZQl@E1=?zSE&v~Ve0ROR zq@p@^=PBgbR^1}UXQv|Ao?}Il$~~a_)f7pL?X%sdTc)+T+2Xb1db{T?pdN`aP_uaz zx2Jr)?A$9Xm{3LOl1T3YQiymIi>eUzDQ~+kG4vhrt)a__2{*xzj2|A`vjftLA1dY@ zq`O{UWmUe7v{QdOv|PpLHZ8?=d4^&(r^!F!d$r9ITUG!LlMsS*FJ zleDrR@U*NU_eD0UZ)UwgCv8^JEZdEsQonpTh9?*bpo(z33Iw)xLdz1G_3DQHgJswK zU9v1A>0577tP-5s{xQ=j;fJDzSTEKQeR+Rj-KzfoQ>T)G^mnn)lwU_q>5Cf}oVsxR zq@w(}qJBy6QI=$u+A%mbok?q-O#7bJ@WuIKel_3F5078l>ZL(^7?za6%_$SFy{R-G zcN@H3kSX)rr{dLnWPy&d%4D>|`SA4%ea@TY313_AFMWQ3!_Q5`=kESR>o@k@SaS)oV zFbYO`k*L!$*c!{m%Zh&FwRik+S4D-Ky~=Mb_bT5-0nV4-icT%DU+JIu_!Q(pc|Xog z&HOW)m!$Ku=bo8XMIq#a`c;C(QuiJAdx+Wl@LD=4O66M^xSDL0Oa!5E2Ww=28;m}H zo3J;(24U>H_@E8uyS0vl=v&v{&JY%_vGSG8bbA^HQZ8ROnFt)@z3OtvZQ@lJ)^0h4 zMzB%|wy>7WIX1C=6w{`%&?cU}J9BF~vLWteSte#H-tWgKUbeRctJ>ukj2@gQtX|oi zG_BxS5Byl-k{>>kpvn>Qp}vY~xQCp6dyyF%Y?Ti(TqN|Rd2-5mSct}`Z8T)iE3|;M zLOnL!2R&Fx%k3uv^f9!P4ks>Wi!2E*#2N$U>I_J#^PTS{i6{2HBJ-OxY)Wa?K=YP^ zuatLT|WEjeGh5=5sAM z!=j@%3kL?;^9kLJFQRCy8(V9*|NQlPJ(r{VenLNQyJw#eJa6b_xqVUEp%;b81;zfO zlnxY`U>nOhkL_n{{)s>Z$Z&5HU9>E*Jz;)OL$r;edoFBCXHDcgiepo5MuFcP-PnA+ ze0)-V0BUOrTtctG>%mjQeZ6o90@)EDHX6Wv)kwLcQK}T3^?cNg_-AC(i`NZqbBDL| z^r1HcT;;hjE%Fa01D-%v&JP}nOt+3D**_z(DN%0c$q$hr`Y`AYqo{bPj($0LdcB-0 zM9S)m5CM@(qqKDycOW#dPOI=Hq{5hmH8-IxQb!nB8ssIrN=)wfY z4rX>}3P>C2b*mel?iUJ0CM4XpyB7ZZHY!2&(f1MQsvo+ zh@`3YN`ykg=;Bq&Z2gk`dEiDhVU>X59$L`-_KM$)CuGvj+SKyevjGThKiVO0=II{k zyL}i$&t?D>st7&M#?mxy2YQh{Q^7fZ)VD!GJJ{kQ^=s?*R4n!YsR23bkf*906V;d& zy%N}-5jfbVxB<$_c;OhLNFZxUoiblkv10o*&~$r>w9OTBX7i@X`8+r4V$C~+EN|cI zlk=bWB>)z%KQr0Eh(voIeZM@g^V9AGN4rCg^v6YAR9`fq@%5Iu>U;u5HPk;De(AG? z7_tSQg^3KwQMQPz=#0yPF)(v%lxRk*gi7{+$t>f?*)dqctz+4TzZi(vY>=%(88hPL zyYiKDOz~YZKt_u#@l*tPl?$J%UBewO54Yf$r#!Qi3%5O_AOiaZ% z2Pjo6?oe*cM$P5dziIhAYetz9IZGxIY`)aR8quWP>B2InJH>zC`mho9Q@Q4a9cgWy z*1As2lLHGXG!WSno(CB-uWhOwXVInxsZH8R{*LJU+3x$rJ-$sOc46Cbhbs*@w8{M) zd|_ZeuCHx4v0KZ`vZFsybSamTZ)aREJy@;!CiDiZUB9oWYz}DQaAt6!m2;Kh&tYrT za%ceNY!>fXX$wnkt$kv0kx7RWW$k3WU_cx`-ylq|shpXGA5iO?YkB9XXZOpi6h2wQj<`?OXZ< zk&~+vhsO{0n=wSa57yf1F}h%)`RT>h*2>S#IV#F;0rMQs2D7F5SqlQ6LvFR%V5Yj_ z!-E9F{1xc1L?&>IKu6T?j!0p7Aw9FAK!+w!zR?2z5*hi>k#*zw)KpEY!(Z-G7B&cepdH=Jwmkbq;o><%DLT zXWMQw?OU@AS*EWrw~{Z}S`kr{NCs#vJIF!c9Y+)?$|=Fu!iR$VEsp{vc12zYtKEse zj+O{Nxs|}deahWYOP0Z_c%`3ZaZajwPcgm(tIbargCRWF_c1$v7CG;!1>0%LB~g&5UpgCX~b?f{Khif9_3r9<9r#lwPUzeP8AuorKvM+aKnNCe?)I2VKx*@G#9>SKV6>|2k zE+yJwVeaOS5VI%AvJw3W9jewLGHYrTCM{XD6N0T}(A9iyhq6<|d=>$PWGPqy$MaTU zXFH#d<2XwkzHNW4%kuSH+UdDN?5OkJJ*LDeNglofN5W_)RC@)(ZU7WU=iOw$ajlg} zH6dvkK(~eQ`GDlhA##**U6o)*g~3K=Q|LM@@NMp%O-)v=_X{bnz6AGr_ugWf0m6Dp zX%CzUVWl!%P-{xr`{W%hETu|!OyM&WoCvE%}Gpr*E$wP``f0(nYLr`dd%gLqfY1wvdNoa5*fHpTbolXt3FX z9w-D>pYoPP!j- z%TDRpF1xtVBkn=PO=GE3LPo*UA(BryYt zU46WIBzshpb+CGibQt??4N_~B2FzlKSCMI-CZRL*+tkNBqq(xB)f)pGr2WGcj&#FZ zOR)ZGO0z_bU!eIeG;!Bf07)^VZ%h+SurY}MZ%nK=IJmr{eXRG*-tKOf$6mZH@0{px zBy5hrFInmdV*Xuua%V#Afi9)3BTdKmkkXlxpB7o+u5`Pn3~TGkIqG%5ip}_iW+XTkJmy09R%WYn*g2;>-fWiIh_N4SLPRXl91n+&&Kd=V zZ5U2gg}Hd{=p0E7UE?MOBs^>9$euv5kYEQ__5@K9ku6H@_9gJb7VEef%Eto{?}&#; z-YZ-O)naqx^Ojj-XMtT(p1voV6h>F6E6WVxz3VqFo^)Opc^_nzsDEk|D2PB6t+v@z zMR`wM0MS~PD;r(RNGfKIUKPInS5sh&f)S)V7p4mi76Fm#nKo_G^=4t2(69LM!3q zSPbZUx4k?}_#wk4fucIv7#~BWjbUA>50iCViRRbRAknDHc6iuf&f#B|W?t}~tw<-+ zhNY*m>b5ynyH{Qwee9hEyAO|^W9-TT8n#3^@ZZI)Ceg&*c}Bi4TwHWx{@iwPNpNRX zsy1h!nN`;S91&M3D^bi!8lhFrX6?Yupu{CfoH$ivW{_eJ`Cw9yUJ3`FWUQuYfNrz+ z8c>j==p+F+?p>*sq?GSVE?%%Ot}wKC^Y^4On zM+AvXl?P~`_Q0J@@VFcfT0gEd?>c`gVAFib(RZm~a1PCO_AQJyj;rnNSj#g$&N2LK zXxlKaD{mO@kM^IEKP4G%7-nI|dRcF`sBUbviPV1HPP`RiI#{4pAECGzSJI<~TK{qI z;y7ch4d#QB7+^2=A?QAVli~JAK?-g3*h-m`U-{wAs1ZFX$uS~y&EV5xyV-mjUa}9F z-h)OzDPbHQH`Zp+^amxhCfzk;fQJt@i z!(_{X2P0my0=!!X+fee&D=V8fJNTjWDDQso(7d00gE^E*?iXR~Ja zJKd2)P209MDN0Q5y8Yc_JXsk1vKRrhc64`TnVz);u zR!O1p1wPy#YhjU+gf*^o#xe9Zw^vh-b(5tGZj16h%2V*Z*3Rk>N(Gxys*U1TP{bI1sKm)#RVK-2$kw|L zZaABFNf%$ux%A#hPL4`Lx)wm)1tORCXxDc4aq4auO)rMdAD{>OUp}3_75aKP&O#_4 zBvqhMc!Z$Bv9d^yt0yAX;^u^FT{Q2<=CKd;YU_!L+TC@?922vWGeT9Y?TYS;7KQ+p zZH=Ml_m2ZvI-iZ~)mA*3;V<8_zTZuG51>#Yr@pT)wvisdzB1Ll>1ir#jXsN-G~U}I zoIZMTYvaylWeaMmz%SHyDo*<}tvmjjqrsBs=@i|Am^Hs{O4VAbO@<6`t4zJqe+d6(6&!%*_}i8 zv8R`;kn9Iljj*APzpDoSyRi!yH*)EN7&!}0zTtPRZ-rG;szbhElegYAQ|=T4g#s@> z&Ae%cIs*?HNB%ujWMB3jeE@1Ms$QAo#ppJ<0n9S@-x`q0kr9-@h)_bEN{O8sGx?s5 z8_=Ffj=NdqoSOn~I4FphMAJrNfZ7<6K@3sXtU*b^X9fcjwG=b;#IT>Cl0ExZ7lwHw z%KH0if3GFdY*Z~X>$J)BqTJ6J>%Mu`pUih- z0;?hfWqApvYgHAyVre9&pp2ATqB1|6LnuQ?!S2)H^$%MyjGW`R?> zad3)dZKQtJ7kcN2H!-dUO9h15{$w!!^Qg!9f71{X^I~{A&f1=$ITxb~HNZ3jhtIdq z?)AOrDBa+=?)PNR{AJ8zmXOpaX`_F!b@*F7>>JK%MT3~v=(2lE^z zJ=s;n=e4>Lw2`qg3~em+6E3nc_FyFAPcZy(?j5;-r=N_~@O*xWF{eXr#4mf%MIX6G zy<)Y2Q&n`Yr@XkPk5me*LvAW?JT2kAD-F|qM-ao6Ud(4W5@zCm*A@TQ;`G1ALL+eR zBsICHE+=SHKj31v2|hNeF+v^5VGM2*rAtSU2B6QmalKLUqHW1OTO98 znPV-`lfTmvbw~7)m12I*k&-Gy@ouWVoSvF55gNBsTw5E~GsI}BH*@dteQNLPrI&51 zvy(5vuL$bJCTM|lI&`w?vgqPX$^Rp2^uLGAfA;;KK5Gdc!=N@`3V(&MDgfReqS|ms z;PAHp#T&+y?rieHF3STN$erQ>qS6%E7Y^}Ky<@js{-RtblPoi!v^UeU*JLFB>0b`d z`|G8uik-xp%!_8hYlk^U?9tw%OCk-*^nh&R_c$lxjj+i@jp!0x`nS&y)!A?Ay%tvI zeh)Z!Mt$X{scI^KEf(dHvo?-*CoKIo8!nfs|V*Dmz($F*D z6ajlGQJwx95k@ciDuZm9uJ?cV{UI@NkmZ@hKf6*%@-S&dOB$VSzED@_YLd#`;;%MI z+JI||+2zbiPwwU0Q2716cDkU14|FDU3nXMG*a=pbafOXZ0`u!SjDY&-PLRks^}bH) zukp3*N`7Ic$kh#jS(msp+>jvR&ZHE+_LXGmFDK~y^=kYE<|-2>#-0;t67J8FTl}?e z5A+pD_Hr`DY(xR7|9b5I_|MFy#?>SIs0^Ky5xW$t$VZ`TzD&pZFK&KbrfOfl?nm^D zF6bXe@qZW=lQ`cMczqIbTQ7`0p(RP}hd%YaB=u#0%x@z6KRK;}rN~~qhzmyjqcSg8 zfZ=*J`@0{ea%3+hf+n2aQ~h=1|1v8Ia{urAT)f^GvVc@ykK@Y1HKfcFv0G-9WfuW5 z$=b(j0kD7egcYHI;6leKiK$UvgUM>qG5JyN+?eFxU(4Pld0weviDdfkEdv$5-u!3N zq*NyQGylUQ*TT5lXFTAC2w!(2?^C-LMy~&J zNcFYDb?v{-+Q0roY82qVe*eo`{h$1NO7r76(kE(O700=(_vNJ$t;aVKo$L3NaO1)% z5Ic+DtGm*GY62ncf4!&A-`yO!O7fPR#@Y#~vXN1~uT6~%rw<`ijxm>pe{=<>{s9<| zR)SeBWbUL`HD;tr-AJ)sqAz~3>7{2#&I9sh5&W%ERIcte_3jl%$o;jB97DF7tp3U4 zmxk`D8sR!c|6`mh2K;@m{{Qkf(Wgnos-OgpVA-umqf!L|9@1sti3k?fQF+gpnX7QV z1aYC+)VZGDKQ`6LhZCsSlF*&>KLDQie{csK`=7bx8YoGwCNxVc7(_KF+T_)t%H(96 z72^y5yi=De<^Knd(BC?o-oKa6ork4bM!n=Dy0V$;s=qg6yh?k0>3yQxZ!I{pW=unn zqDy}xq%{pF9v2UTMI({>*$vR9o9NNrMoi5Op{*o0=*EiJg-%_`yFv{|bEFJM;siTx%2ItS(#on6AIr$$*ubs%e zP26#>*sM$S2{u70aFkXJ1nGRzUkyH-D$>zgAYgS}pEr|^arfKdDMN6ykMVa}>6ka_ zE*?zx`@KBvGT(cD6M1V%AK$RhaQGPTP@39tTH9!$4kE zhx4b|GgZ2|X(#77MYd;n5H8NNyAb1<_1G-y#q3qVtwPUW!K|8oaPwNw5%^1uj8tzO zC~>s>q*(MMN@DVO&hd?j&zFjVq!;{dVRQ~-seuJisCC)psj?AOgUfl17inOu!n!Z- zlKO@N?L`zeb*MuPjGK1hMx^@3#@|-IZFL$-=&tT-hT^=#3GV08nb0x9L!O@@QR+TJ^`GV5~j7B=K+Pp;JR3n%y~uwO-NO268HJX z%Z_JpJC(9hZvP;TN@FYfMGHxv{7{!(i_a{3$jDCTjVZ`^L54sAFj!{(>k%+nOe^ zi>2`+DB0G7PVzf}Z7B2kNvip!^RqMnW8$i_vG6<@8ZfRRzIhp5PnRNaQ11rT4q?(L|0$ zHIgJ&xQe5&Gn8Zg$M8fzn*yhZ{w9AjlgflSCt%} z(zLVIKdhPODexiKult%&na5HKWCPc%vg?2aSwuDw3PiCGQUqjI7NZp?iy^Wo1&Tow9zg;Y1qF&IyRxZl z3PP+vSb_u)NDYJ?ArJ}(CO{yW<4mhz9;efGI`hnue<#nq=bW2!&wbB#zVAEl>%298 z&{+3#yC+wZpJpN@Us4EYfr?l+K__(Mxb?bWFv14h{FE`{{lrEv!G3wo+aTYdZd|xgu$T zg}mv$m|>#s+`DHf!i|u5UVe8@&vwO%=X`jWj#hcxcb|+@jbj^4d4$%?YHS6j4Hz=Q zX}-neA#;)F2n2P}yZ?>xG^vTe%FjNC)1zF+fuJFO?IoVdk8kPvk1M)$N>D2iBTFGC?hurc0gYq+aR5A(QAVapA+GZ_H^*z zo`q;%v4gq&16!@qI`wX#rM;>T4L~1zk6q|4{rZr@{74kFUa{6cPW12#UHnL{Aym6< zlX9|p?oTvdn+xtvx(+2&$d*a^7@R={L_dF}i@Ubt<>Lc#lC6{7wf$R}C>y*wLE5-K z%)*YI($Zn15aATBN<9%V@XkZ`w*-=ZEcf;=ZAbs!wT;`<5|ne>D9Xkq(fBT2cx1iH z5%8=Bu%XEtEMpixY9H!@>5=*xTkHq*PsTbzNzbx39U+}iPwRFaoUY`2J^ zTMH5@N6}_#Zv8WwDz+%I^={?Fy@Hp5;0$;$(XVAb6WjW@r?PfRs3JZ09(7aXIMzZc z^o}9*Nc<_41y+h+!ZR|@R3{0<43UqPP! z2N1MNl)^~WBWw4Jyo(}H`OUj}mk4}YT1u4Gdo|1wZZ#+ecZL>X-`wv>ecF!m_eprR zlTpPh6}Tk5BVsWzHcG>ZQ?}9BZ^MDc0{PBccnbh4?*$vxvo<(RJov>Z(Qmo&|2^jx zId>z~8)xZ1txcq(KeT0VCOk8bCPRGb+{+U$PQ6=(lyeh065Vf$(@}Ap7AQS|#@Rph1J+iQ(`*I2~kI ztbwpuv(%dErlRb}wzI$$xiZIw619NBVkHI~AO}9ICLnG2SAftX z3JFxMF>8UCXHiBq>epFh92){OFw3KCC`Pg0g$*qZu^~C+{B7aV_z74Q7>r3AYd;Ri zAaXn94)1^KL~;#By?NeLtM@SA#Q0Y}@-fh9JIDGiEe7r&oV<(0m{R4Pm9&}_1M#;d ziO6i^-1+FJJzf9!j$@(Zd(s^3t@th3`|9Yp zA}YoV#Luyz{4#UMYojT9;cT8?j_aek7x~o*hoP0$j(vs3D5ZPd>lux>MW#OsGc1`? zUX`m}8v91_A{`ChC2_V4Sm8_zgrQx3 z2NWR^&LW)X#996sb@0E0oOW%sz)2`ad{Ae8;yva{M81PxiFbYd3TTxf;pdMM)^Fa| z9~`1=ja65ObOXVxNAlsGXN!|IFZ;7ZOEkw)F-Fs`Y>kEs2x5;PqfZuFE*+xa;+^Y7Hh}103amPyqmMhN`^JN&g=G5LMBi z5y`85xba1^S}WtSLtNE#J zG=TlYk}?)wHGubA9g3twdk(8()crto|wxe7@9w9&I2>-Ike_< zBE@mJ>C%xL=0~@;12We535-wXDTgjosgk}cg%m175glhdgCMJr4|xXI3-71eIjOo* zzQ`Y_Hc?{A5Sb+8va|skl7!Rsvlykgc^x!Mt#Daq)W3|^$3@D%Rj-@cX`F1?l=cHY zH`!MC+F;eRYxx5N#XWBw`_=kP*_t450mTE=?)Oc(_aPT1^q z^6EjF`CFymeTsm7<(!%cFzEqo&aar?olMT^||B6oj=^~ Xhl?Lv{N%15|MK-6}JLpJw2qH)f!9XyCBs^1|0s*0xM-Y6iZpghr5RwoQ60sDe6(3Vr z#K*FrZf!*?7FP-gs3W@Af^@}FKoPNk0YMnGSd0ot_6A*W+x}5@J3F(}oXoxV_dEA@ z&+mLc=lt=T99@^L5154WSMvc1g#v#>en8hx1|e#3A^>aF00sbn05GU`fDvMuB2M^j zF~A@;3b8jGIjVmG8UQ98BQ^k!^esSqKjZ>7Bgl=Qw+zidz(Bx2z(Bx2z(C;lNI;MY zODJ(d2?c^Fad0XG1Ar|=&(sv=NbOKwh?%u77ww<1(O%vF6cx?cbM*z`n4Y1bzW6=v zB!gxH0RsU80RsU8fjI&kSGFgQ&E~OPDXtzoH#U#U0l(A-fB<9y7)SsG!~x;V6GD8w z2ZL0gxAp&k7}Js!3K@^Zl4Q6DA!!2aB9f-D)Iu4H?c&M;KK^Q%P_z|RP!ixIvBa1D zZ{H;d}$BZm@sF~R&d5s2qYeKQx8O68*Bx=7_oEVj3|H_Mg7;&7Nq1T$ls zL?Ki&B^mZ_1_*{TL~^lAA(l!g`T>OrQl-L|s#J<0UZOD3JpqE;nF&HJ#ALG}AyWu( z*-VJbg*@HaUYtaB0`*OLNHm*Wrj)17J%4PXBWrGd;-uL%y5ct;m;@|3Nb( znHOXOE(5N45tvu7VRspD&5OXif(^Ut{|wh$#S2T2GFOGvv%0$=2;i|;92SGeVQ~aJ zoG};J*#$qwZktQk|c@HpTtm$%gAkHjWh^MBTb9U}OPOx89dDSAO z?FSk+L7qz_Ew;2;V(qYk?&!pDbNBG{^5z8vhwwwgR)-5>*T%)KTfadB!HG%9;*<=9 zGE=4Ami6IByYhDL*}Jdkz`;X@|6Kf+l21Q7QFijw=cmiRtg5a#Ut3py;qQ&tzWTbU z`FhKD?H!%BZg<`3?!T`Y7<@1^{BUIK>5t>jw9j9>oY3n+0rYEGv&w#=i;UQX=_NF^PJjR{LqUpl?+I5>2-V8?U6@tcogb>Oet8pe938P!@r zik7QA_ug%f%N@t^Uq)+Bj7wW8b7}GGb`@*Xf79 zdQwCG?1R{~;S6KP6uU7UD9gFso-@2RW#GqB{KfvhPE^)<$tw`|hxajM9NW zy>gzuT&e@X5s|l6`qwDldF8cwF#BwGn9q&+JN4m1wqqq*vjYbF`-Lf%@e!}~_iL1? zLuAVfPX`ZX?dl4cFnf4Jaq`7t&6ZB(nTpMi*XzKSXH5gnxP6j;|6Rv*Pv6}h%Q>f^ zPxfZjIiHbQifjFaYwV*f+2=bBche#IWJ{mO=Gjf#vCS2IOx$SWWpZtG$D)ai7jJO# zddS5?lI%Qg0k`CFg|(vp@kT+>!BgJb?-^URiY{DK=AU2$5{kch|HGX{xDQU&6Kg6q zYvMYVw^xr=7jEPqr(N|J;F`I78-8SWAG%1?)LvPy1BJVqCN(+`u;G4<^U`}}QJ3o5 zG>IQQe6T*K>f$C2o3?~V^IC9`H}t?ZZ^fpby-nNgiSI{tmQHN0$9?gSb9e8B)Y9C} z6@G!b+PGjx#uP2DZy;VE(gDh-bYh^PIiB2q&pJZ!2Yy=M$&$g3TbY9^@NrT27PT*0 z0!*{(&VJuC9eAtv+4Y>l&(El^8L9r)B16pMow{PuA|o>S+wXcfs+>5dyJh@PA6eLx zxVO7o^$NqxdGb^T@;z=wZ7;q4D5JHMRaM2UgYqjT(Zx#sXneBKDed{AIuK~Q zWpb)P6Z*Cj6;j^Qv)B4&NJHIThoa>SAHWWE>{{sP)pG2USgoZFq7K4|o2O$fvh*fVK}W-#!wo$-lM}s~=n=AU@<0c(GbTCj zCBbggM7ePEisoC*k;GG%Ds!jZBFYkDWurBBWR1h26t5dgAKQ8gbg)E;f=eHdgq^{Dx7ZGl?TZqCfV&_f%kc)-tf_Y;YdTfJHr X32xAxA~M~rnxJ)`?qh`e>+bv$DX`1q literal 0 HcmV?d00001 diff --git a/docs/Debugging/DEBUG_Debugger.JPG b/docs/Debugging/DEBUG_Debugger.JPG new file mode 100644 index 0000000000000000000000000000000000000000..76fb44070fe336e686dcf9cfebf05511d598d523 GIT binary patch literal 80178 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%0Ac>Qsj+5)7p74jRxp!(rub@kVpBnyokHCnv|1or< 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 YivJB(-}_?RE!!U-HT*lvb~EvR01er_(EtDd literal 0 HcmV?d00001 diff --git a/docs/Debugging/DEBUG_Intro.JPG b/docs/Debugging/DEBUG_Intro.JPG new file mode 100644 index 0000000000000000000000000000000000000000..397db83d5174744106e09a65ce48a6163146f66b GIT binary patch literal 78688 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 z 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 t*{Q^U2nCZHfak0xF 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 literal 0 HcmV?d00001 diff --git a/docs/Debugging/DEBUG_Listener.JPG b/docs/Debugging/DEBUG_Listener.JPG new file mode 100644 index 0000000000000000000000000000000000000000..d575b696bbbaf1bf241e3047912824c8c15f0ee9 GIT binary patch literal 19966 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

Rk3!@7@kj-|M73kKSI>fH{N+4FM0C|lQw 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 E0LsmLf&c&j literal 0 HcmV?d00001 diff --git a/docs/Debugging/DEBUG_MissionScripting.JPG b/docs/Debugging/DEBUG_MissionScripting.JPG new file mode 100644 index 0000000000000000000000000000000000000000..69ef88ee6619503ebc84fffea37e8e92d97e0607 GIT binary patch literal 59586 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

Mp#Vsb_0WBL(#+7$!BLdUqP1u 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 literal 0 HcmV?d00001 diff --git a/docs/Debugging/DEBUG_Static.JPG b/docs/Debugging/DEBUG_Static.JPG new file mode 100644 index 0000000000000000000000000000000000000000..bcc70cef49b19ab5f2cdacc5f7ee2378e5273614 GIT binary patch literal 58730 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

l(N59HNz2cWwFsM40;&kwcX&#nVlTL7vb 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 E0UJGMEdT%j literal 0 HcmV?d00001 diff --git a/docs/Debugging/DEBUG_Tracking.JPG b/docs/Debugging/DEBUG_Tracking.JPG new file mode 100644 index 0000000000000000000000000000000000000000..5f694c8e4b863c86b5eb056aa5f997a4a3141402 GIT binary patch literal 14701 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 Configurations...**. + +This is the meaning of each field: + + * Project: The name of the project that you are debugging within your workspace. You need to have a project registered here! + * IDE key: this string is used connect the **debug client** to the **debug listener**. + * Timeout: the amount of seconds you want DCS World to wait for the **debug listener** to be connecting. + * Source mapping: Select the option "Local Resolution". All the sources are loaded locally from your PC automatically when debugging. + +Thats it on the LDT side. + + + +## 3. Setup your **debug client** and attach it to DCS World mission runtime. + +This process is essential. + +Within the MOOSE repository, there are two files that you need to consider. +These files are located + + + +### 3.1. debugger.lua. + +This is the **debug client**. The source is part of the LDT debug suite, but has been modified to work together with the DCS World scripting engine. +You need to copy this file to the root directory of your DCS World installation in Program Files. + +![](Debugging/DEBUG_debugger.JPG) + +The location of debugger.lua is here on my DCS World installation. + +### 3.2. Modify the MissionScripting.lua file. + +The connect.lua file is a file that contains an explanation of how to modify the MissionScripting.lua. + +But for clarity reasons, I've also attached my version of the MissionScripting.lua. + +![](Debugging/DEBUG_MissionScripting.JPG) + + +Take the MissionScripting.lua from the folder, and copy / paste (overwrite) the version in your DCS World installation directory under the Scripts folder. +If you want, you can first rename the existing MissionScripting.lua file to MissionScripting_old.lua +Don't mistake yourself, a lot of mods/tools modify this file during installation. (like slmod etc). + +Once you've overwritten the MissionScripting.lua file, check if the contents are changed. +It should contain the following: + +``` +--Initialization script for the Mission lua Environment (SSE) + +dofile('Scripts/ScriptingSystem.lua') + +-- Add LuaSocket to the LUAPATH, so that it can be found. +package.path = package.path..";.\\LuaSocket\\?.lua;" + +-- Connect to the debugger, first require it. +local initconnection = require("debugger") + +-- Now make the connection.. +-- "127.0.0.1" is the localhost. +-- 10000 is the port. If you wanna use another port in LDT, change this number too! +-- "dcsserver" is the name of the server. If you wanna use another name, change the name here too! +-- nil (is for transport protocol, but not using this) +-- "win" don't touch. But is important to indicate that we are in a windows environment to the debugger script. +initconnection( "127.0.0.1", 10000, "dcsserver", nil, "win", "" ) + + +--Sanitize Mission Scripting environment +--This makes unavailable some unsecure functions. +--Mission downloaded from server to client may contain potentialy harmful lua code that may use these functions. +--You can remove the code below and make availble these functions at your own risk. + +local function sanitizeModule(name) + _G[name] = nil + package.loaded[name] = nil +end + + +do + sanitizeModule('os') + --sanitizeModule('io') + sanitizeModule('lfs') + require = nil + loadlib = nil +end +``` + +Please read through the comment lines for a detailed description what it does. +The io module has been de-sanitized because the debugger.lua needs to use the io module while debugging. + + + +## 4. Setup your .miz file. + +When you run a mission in single player in DCS World, a couple of things are happening. + + 1. The .miz (mission) file that was selected to run, is unzipped in a temp folder on your drive. + 2. Each lua file that is included in a DO SCRIPT FILE, is **RENAMED** to a file structure like ~mis__nnnnn___.lua. + This is very bad. Because this prevents you from settings breakpoints at the source file and ensure that the debugger + recognizes the source during run and the location of the breakpoint! + +So we need to do something special. The trick is **dynamic loading**. +And believe me, it is the only way to be able to debug your sources. +So this is a little task that you need to learn how to do, but once you understand it, it will become very easy to do. + +Instead of executing a DO SCRIPT FILE, you need to add a couple of things in your .miz file. + + +### 4.1 Conditionalize the DO SCRIPT FILE execution. + +Keep the DO SCRIPT FILE line in your mission. Why? Because if you would remove it, and you woudn't debug your code, your mission file would be deleted. +Instead, we are going to put a flag before this part of the execution. A debug flag. For example, in my mission I put a debug flag 999. When 999 is ON, I would NOT execute the mission file... + +Follow this process how to do that... As my recommendation... + +![](Debugging/DEBUG_Flag.JPG) + +Setup a debug flag... If you wanna debug, set flag 999 to ON. + +![](Debugging/DEBUG_Static.JPG) + +Conditionalize the DO SCRIPT FILE execution by evaluating if the 999 is OFF. + + +### 4.2 Add a dynamic loader to debug your mission script. + +Now we are adding a little line. +We are now going to ADD a **dynamic loader** of your mission source. + +![](Debugging/DEBUG_Dynamic.JPG) + +This loads the file dynamically. Instead of a DO SCRIPT FILE, we execute here a DO SCRIPT. +The DO SCRIPT contains a little piece of code that loads your source file from a location on your disk. + +![](Debugging/DEBUG_Loader.JPG) + +This is how my piece of code looks like. I am using a stub of the MOOSE framework to load the file. + +`MOOSE.Include( full_path_name, file_name )` + + * The `full_path_name` needs to be between quotes, **follows unix folder notation** and **needs to end with a /** + * The `file name` is the full file name, **including the .lua extension**! + + +If you don't wanna use __Moose.Include, no worries, there is another method. + +`_G.loadfile( full_path_name .. file_name )` + +The MOOSE.Include loader uses _G.loadfile to load the sources. But it does a bit more checking and logs in dcs.log which files were dynamically loaded, and from which location! + + + +### 5. Run the **debug listener** on LDT. + +Now we are all setup! You've got your **debug listener** setup in LDT, you got your **debug client** setup and connected to your DCS World environment, and you got your mission file ready for debug! + +Now we are going to run a debug. To have a successful debug run, you need to start the listener in LDT. + +### 5.1. Setup your debug favorite. + +First we setup the Debug as your "favorite", so that it is easy for your to repeat the run easily. + +![](Debugging/DEBUG_Favorites.JPG) + +Click on the "Bug" icon that you'll find in the task bar. The "Bug" icon is the place where you will start your **debug listener**. +However, first, click on Organize Favorites. You need to do this one time only. + +![](Debugging/DEBUG_Add Favorites.JPG) + +Just click on the Debug Name that you entered (for me DCS 1.5) in the Debug Configuration window and it will be added ot your favorites. +I did already that, so it was already added as an example in the previous picture. + +### 5.2. Run the **debug listener**. + +Now you can easily activate the **debug listener**. + +![](Debugging/DEBUG_Run_Listener.JPG) + +Just click the "Bug" again, and select the **debug listener** that you configured. + +![](Debugging/DEBUG_Listener.JPG) + +When done, you'll see that the **debug listener** is running! + +It will be listening quietly to IP 127.0.0.1 on port 100000. + + + +### 6. Set breakpoints. + +Open your source file **from the exact location** from where you have specified it to be loaded as part of the **dynamic loading**. +Once it is loaded, you can attach breakpoints within the editor. + +![](Debugging/DEBUG_Breakpoint.JPG) + +How? Right click on the source line number or the grey area before the line, and a pop-up window will appear. Select "Toggle Breakpoint". + +![](Debugging/DEBUG_Breakpoint_List.JPG) + +As a result, the breakpoint will be listed in the "Breakpoints" list at the debug view, and it will show also the line number where the breakpoint is set. +When your mission runs, the logic will stop at this line!!! + + + +### 7. Run your DCS World mission. + +Now it is time to start your DCS World mission. Just run it as you would like have it. + + 1. The **debug client** (debugger.lua) is loaded as part of the MissionScripting.lua file. + 2. The **debug client** connects to the **debug listener** on ldt using 127.0.0.1 using port 10000. + 3. Your **mission source** will be **loaded dynamically**. + 4. Your mission will start running. + 5. Debugger is active and will monitor if a breakpoint has been set at the source currently active during runtime of your mission. + 6. Once it matches a valid breakpoint at a valid source and a specified line, it will stop the logic! + + +![](Debugging/DEBUG_Session.JPG) + + + +### 8. Next steps. + +There is a lot to say about debugging and the techniques that you can use how to track the code. +For this, videos will be made in the MOOSE For Dummies video series. + +Please consult the youtube channel for more info on debugging. + + + +### 9. Sequel. + +When I started to use DCS World (discovered it by accident), I was sold. +After a while I started to discover the SSE capabilities of DCS World and started to code lua. +But a very important piece was missing while developing the MOOSE framework. + +**A debugger**. + +I've been searching for about 4 years to get this working. There was a huge learning curve. +I had to "hack" myself into the LDT environment and modify the LDT assets to make this work. +There were moments of "clarity" that made me understand how it all fits together. +And now it is there. Wanted to share this for all users of DCS World. + +It does require a bit of effort to use this in the DCS World environment, but the little effort +is a small trade against the huge advantages here! + +I also encourage you to use the MOOSE Framework, as it brings you a lot of great capabilities +you will never have in any editor. Being able to debug your code, will solve a lot of your questions now! + +I hope you will all have fun with the new debug capability and that it may result in greater missions. + +kind regards, +FC \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index 3cc335f97..3aba41adc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -239,6 +239,11 @@ Those people who have experience in lua development or are excited to contribute Please consult the **[Contribution Guide](Contribution_Guide.html)** for more information. +## 3.4. Debug your code interactively using LDT + +Have a look at the **[Interactive Debug Guide](Interactive_Debug_Guide.html)** to setup your system so you can debug your mission code. + + # 4. MOOSE Support Channels