mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-25 12:05:53 +00:00
941869c466
reg32_t was a transitive solution, before reg_t's were adapted to use 32-bit addresses internally, and before support for SCI3 was added. It was introduced as another way to handle large script offsets in SCI3, and was only used for the program counter (PC). It's no longer needed, as we now support SCI3 script offsets using reg_t's, so we can use make_reg32 in all cases where we need to access offsets over 64KB
99 lines
3.5 KiB
C++
99 lines
3.5 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
*/
|
|
|
|
#ifndef SCI_DEBUG_H
|
|
#define SCI_DEBUG_H
|
|
|
|
#include "common/list.h"
|
|
#include "sci/engine/vm_types.h" // for StackPtr
|
|
|
|
namespace Sci {
|
|
|
|
// These types are used both as identifiers and as elements of bitfields
|
|
enum BreakpointType {
|
|
/**
|
|
* Break when a selector is executed. Data contains selector name
|
|
* (in the format Object::Method)
|
|
*/
|
|
BREAK_SELECTOREXEC = 1 << 0, // break when a function selector is executed
|
|
BREAK_SELECTORREAD = 1 << 1, // break when a variable selector is read
|
|
BREAK_SELECTORWRITE = 1 << 2, // break when a variable selector is written
|
|
|
|
/**
|
|
* Break when an exported function is called. _address contains
|
|
* script_no << 16 | export_no.
|
|
*/
|
|
BREAK_EXPORT = 1 << 3,
|
|
BREAK_ADDRESS = 1 << 4, // break when pc is at _regAddress
|
|
BREAK_KERNEL = 1 << 5 // break on named kernel call
|
|
};
|
|
|
|
enum BreakpointAction {
|
|
BREAK_NONE, // ignore breakpoint
|
|
BREAK_BREAK, // break into debugger when breakpoint is triggered
|
|
BREAK_LOG, // log the breakpoint, and don't break into debugger
|
|
BREAK_BACKTRACE, // show a backtrace, and don't break into debugger
|
|
BREAK_INSPECT // show object, and don't break into debugger
|
|
};
|
|
|
|
struct Breakpoint {
|
|
BreakpointType _type;
|
|
uint32 _address; ///< Breakpoints on exports
|
|
reg_t _regAddress; ///< Breakpoints on addresses
|
|
Common::String _name; ///< Breakpoints on selector names
|
|
BreakpointAction _action;
|
|
};
|
|
|
|
enum DebugSeeking {
|
|
kDebugSeekNothing = 0,
|
|
kDebugSeekCallk = 1, // Step forward until callk is found
|
|
kDebugSeekLevelRet = 2, // Step forward until returned from this level
|
|
kDebugSeekSpecialCallk = 3, // Step forward until a /special/ callk is found
|
|
kDebugSeekGlobal = 4, // Step forward until one specified global variable is modified
|
|
kDebugSeekStepOver = 5 // Step forward until we reach same stack-level again
|
|
};
|
|
|
|
struct DebugState {
|
|
bool debugging;
|
|
bool breakpointWasHit;
|
|
bool stopOnEvent;
|
|
DebugSeeking seeking; // Stepping forward until some special condition is met
|
|
int runningStep; // Set to > 0 to allow multiple stepping
|
|
int seekLevel; // Used for seekers that want to check their exec stack depth
|
|
int seekSpecial; // Used for special seeks
|
|
int old_pc_offset;
|
|
StackPtr old_sp;
|
|
Common::List<Breakpoint> _breakpoints; //< List of breakpoints
|
|
int _activeBreakpointTypes; //< Bit mask specifying which types of breakpoints are active
|
|
|
|
void updateActiveBreakpointTypes();
|
|
};
|
|
|
|
// Various global variables used for debugging are declared here
|
|
extern int g_debug_sleeptime_factor;
|
|
extern int g_debug_simulated_key;
|
|
extern bool g_debug_track_mouse_clicks;
|
|
|
|
} // End of namespace Sci
|
|
|
|
#endif
|