mirror of
https://github.com/dhewm/dhewm3.git
synced 2024-11-22 20:51:20 +00:00
rev feedback v1.
This commit is contained in:
parent
d4db77b9ed
commit
ebf53cdc21
9 changed files with 119 additions and 139 deletions
|
@ -302,16 +302,11 @@ void idGameLocal::Clear( void ) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static DebuggerArgs_t * userDebuggerArgs;
|
static bool ( *updateDebuggerFnPtr )( idInterpreter *interpreter, idProgram *program, int instructionPointer ) = NULL;
|
||||||
static bool ( *checkDebuggerBreakpointFnPtr )( void ) = NULL;
|
bool updateGameDebugger( idInterpreter *interpreter, idProgram *program, int instructionPointer ) {
|
||||||
bool IsGameDebuggerActive( idInterpreter *interpreter, idProgram *program, int instructionPointer ) {
|
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
|
||||||
if ( interpreter != nullptr && program != nullptr ) {
|
if ( interpreter != nullptr && program != nullptr ) {
|
||||||
userDebuggerArgs->interpreter = interpreter;
|
ret = updateDebuggerFnPtr ? updateDebuggerFnPtr( interpreter , program, instructionPointer ) : false;
|
||||||
userDebuggerArgs->program = program;
|
|
||||||
userDebuggerArgs->instructionPointer = instructionPointer;
|
|
||||||
ret = checkDebuggerBreakpointFnPtr ? checkDebuggerBreakpointFnPtr( ) : false;
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -427,8 +422,7 @@ void idGameLocal::Init( void ) {
|
||||||
Printf( "...%d aas types\n", aasList.Num() );
|
Printf( "...%d aas types\n", aasList.Num() );
|
||||||
|
|
||||||
//debugger support
|
//debugger support
|
||||||
common->GetAdditionalFunction( idCommon::FT_CheckDebuggerBreakpoint,
|
common->GetAdditionalFunction( idCommon::FT_CheckDebuggerBreakpoint,( idCommon::FunctionPointer * ) &updateDebuggerFnPtr,NULL);
|
||||||
( idCommon::FunctionPointer * ) &checkDebuggerBreakpointFnPtr, ( void ** ) &userDebuggerArgs );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1370,7 +1364,7 @@ void idGameLocal::InitFromNewMap(const char* mapName, idRenderWorld* renderWorld
|
||||||
idGameLocal::InitFromSaveGame
|
idGameLocal::InitFromSaveGame
|
||||||
=================
|
=================
|
||||||
*/
|
*/
|
||||||
bool idGameLocal::InitFromSaveGame( const char *mapName, idRenderWorld *renderWorld, idSoundWorld *soundWorld, idFile *saveGameFile, int activeEditors) {
|
bool idGameLocal::InitFromSaveGame( const char *mapName, idRenderWorld *renderWorld, idSoundWorld *soundWorld, idFile *saveGameFile ) {
|
||||||
int i;
|
int i;
|
||||||
int num;
|
int num;
|
||||||
idEntity *ent;
|
idEntity *ent;
|
||||||
|
|
|
@ -36,7 +36,7 @@ If you have questions concerning this license or the applicable additional terms
|
||||||
#include "framework/FileSystem.h"
|
#include "framework/FileSystem.h"
|
||||||
|
|
||||||
// HvG: Debugger support
|
// HvG: Debugger support
|
||||||
extern bool IsGameDebuggerActive( idInterpreter *interpreter, idProgram *program, int instructionPointer );
|
extern bool updateGameDebugger( idInterpreter *interpreter, idProgram *program, int instructionPointer );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
|
@ -181,102 +181,106 @@ void idInterpreter::Reset( void ) {
|
||||||
doneProcessing = true;
|
doneProcessing = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool idInterpreter::GetRegisterValue(const char* name, idStr& out, int scopeDepth) {
|
/*
|
||||||
|
================
|
||||||
|
idInterpreter::GetRegisterValue
|
||||||
|
|
||||||
|
Returns a string representation of the value of the register. This is
|
||||||
|
used primarily for the debugger and debugging
|
||||||
|
|
||||||
|
================
|
||||||
|
*/
|
||||||
|
bool idInterpreter::GetRegisterValue( const char *name, idStr &out, int scopeDepth ) {
|
||||||
varEval_t reg;
|
varEval_t reg;
|
||||||
idVarDef* d;
|
idVarDef *d;
|
||||||
char funcObject[1024];
|
char funcObject[ 1024 ];
|
||||||
char* funcName;
|
char *funcName;
|
||||||
const idVarDef* scope = NULL;
|
const idVarDef *scope = NULL;
|
||||||
const idVarDef* scopeObj;
|
const idVarDef *scopeObj;
|
||||||
const idTypeDef* field;
|
const idTypeDef *field;
|
||||||
const function_t* func;
|
const function_t *func;
|
||||||
|
|
||||||
out.Empty();
|
out.Empty();
|
||||||
|
|
||||||
if (scopeDepth == -1) {
|
if ( scopeDepth == -1 ) {
|
||||||
scopeDepth = callStackDepth;
|
scopeDepth = callStackDepth;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scopeDepth == callStackDepth) {
|
if ( scopeDepth == callStackDepth ) {
|
||||||
func = currentFunction;
|
func = currentFunction;
|
||||||
|
} else {
|
||||||
|
func = callStack[ scopeDepth ].f;
|
||||||
}
|
}
|
||||||
else {
|
if ( !func ) {
|
||||||
func = callStack[scopeDepth].f;
|
|
||||||
}
|
|
||||||
if (!func) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
idStr::Copynz(funcObject, func->Name(), sizeof(funcObject));
|
idStr::Copynz( funcObject, func->Name(), sizeof( funcObject ) );
|
||||||
funcName = strstr(funcObject, "::");
|
funcName = strstr( funcObject, "::" );
|
||||||
if (funcName) {
|
if ( funcName ) {
|
||||||
*funcName = '\0';
|
*funcName = '\0';
|
||||||
scopeObj = gameLocal.program.GetDef(NULL, funcObject, &def_namespace);
|
scopeObj = gameLocal.program.GetDef( NULL, funcObject, &def_namespace );
|
||||||
funcName += 2;
|
funcName += 2;
|
||||||
if (scopeObj)
|
if ( scopeObj )
|
||||||
{
|
{
|
||||||
scope = gameLocal.program.GetDef(NULL, funcName, scopeObj);
|
scope = gameLocal.program.GetDef( NULL, funcName, scopeObj );
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
funcName = funcObject;
|
funcName = funcObject;
|
||||||
scope = gameLocal.program.GetDef(NULL, func->Name(), &def_namespace);
|
scope = gameLocal.program.GetDef( NULL, func->Name(), &def_namespace );
|
||||||
scopeObj = NULL;
|
scopeObj = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!scope)
|
if ( !scope )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
d = gameLocal.program.GetDef(NULL, name, scope);
|
d = gameLocal.program.GetDef( NULL, name, scope );
|
||||||
|
|
||||||
// Check the objects for it if it wasnt local to the function
|
// Check the objects for it if it wasnt local to the function
|
||||||
if (!d)
|
if ( !d )
|
||||||
{
|
{
|
||||||
for (; scopeObj && scopeObj->TypeDef()->SuperClass(); scopeObj = scopeObj->TypeDef()->SuperClass()->def)
|
for ( ; scopeObj && scopeObj->TypeDef()->SuperClass(); scopeObj = scopeObj->TypeDef()->SuperClass()->def )
|
||||||
{
|
{
|
||||||
d = gameLocal.program.GetDef(NULL, name, scopeObj);
|
d = gameLocal.program.GetDef( NULL, name, scopeObj );
|
||||||
if (d)
|
if ( d )
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!d)
|
if ( !d )
|
||||||
{
|
{
|
||||||
out = "???";
|
out = "???";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
reg = GetVariable(d);
|
reg = GetVariable( d );
|
||||||
switch (d->Type()) {
|
switch( d->Type() ) {
|
||||||
case ev_float:
|
case ev_float:
|
||||||
if (reg.floatPtr) {
|
if ( reg.floatPtr ) {
|
||||||
out = va("%g", *reg.floatPtr);
|
out = va("%g", *reg.floatPtr );
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
out = "0";
|
out = "0";
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ev_vector:
|
case ev_vector:
|
||||||
if (reg.vectorPtr) {
|
if ( reg.vectorPtr ) {
|
||||||
out = va("%g,%g,%g", reg.vectorPtr->x, reg.vectorPtr->y, reg.vectorPtr->z);
|
out = va( "%g,%g,%g", reg.vectorPtr->x, reg.vectorPtr->y, reg.vectorPtr->z );
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
out = "0,0,0";
|
out = "0,0,0";
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ev_boolean:
|
case ev_boolean:
|
||||||
if (reg.intPtr) {
|
if ( reg.intPtr ) {
|
||||||
out = va("%d", *reg.intPtr);
|
out = va( "%d", *reg.intPtr );
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
out = "0";
|
out = "0";
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -284,63 +288,61 @@ bool idInterpreter::GetRegisterValue(const char* name, idStr& out, int scopeDept
|
||||||
|
|
||||||
case ev_field:
|
case ev_field:
|
||||||
{
|
{
|
||||||
idEntity* entity;
|
idEntity* entity;
|
||||||
idScriptObject* obj;
|
idScriptObject* obj;
|
||||||
|
|
||||||
if (scope == &def_namespace) {
|
if ( scope == &def_namespace ) {
|
||||||
// should never happen, but handle it safely anyway
|
// should never happen, but handle it safely anyway
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
field = d->TypeDef()->FieldType();
|
field = d->TypeDef()->FieldType();
|
||||||
entity = GetEntity(*((int*)&localstack[localstackBase]));
|
entity = GetEntity ( *((int*)&localstack[ localstackBase ]) );
|
||||||
if (!entity || !field)
|
if ( !entity || !field )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
obj = &entity->scriptObject;
|
obj = &entity->scriptObject;
|
||||||
if (!obj) {
|
if ( !obj ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch ( field->Type() ) {
|
||||||
|
case ev_boolean:
|
||||||
|
out = va( "%d", *( reinterpret_cast<int *>( &obj->data[ reg.ptrOffset ] ) ) );
|
||||||
|
return true;
|
||||||
|
|
||||||
switch (field->Type()) {
|
case ev_float:
|
||||||
case ev_boolean:
|
out = va( "%g", *( reinterpret_cast<float *>( &obj->data[ reg.ptrOffset ] ) ) );
|
||||||
out = va("%d", *(reinterpret_cast<int*>(&obj->data[reg.ptrOffset])));
|
return true;
|
||||||
return true;
|
|
||||||
|
case ev_string: {
|
||||||
case ev_float:
|
const char* str;
|
||||||
out = va("%g", *(reinterpret_cast<float*>(&obj->data[reg.ptrOffset])));
|
str = reinterpret_cast<const char*>( &obj->data[ reg.ptrOffset ] );
|
||||||
return true;
|
if ( !str ) {
|
||||||
|
out = "\"\"";
|
||||||
case ev_string: {
|
} else {
|
||||||
const char* str;
|
out = "\"";
|
||||||
str = reinterpret_cast<const char*>(&obj->data[reg.ptrOffset]);
|
out += str;
|
||||||
if (!str) {
|
out += "\"";
|
||||||
out = "\"\"";
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
out = "\"";
|
|
||||||
out += str;
|
|
||||||
out += "\"";
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ev_string:
|
case ev_string:
|
||||||
if (reg.stringPtr) {
|
if ( reg.stringPtr ) {
|
||||||
out = "\"";
|
out = "\"";
|
||||||
out += reg.stringPtr;
|
out += reg.stringPtr;
|
||||||
out += "\"";
|
out += "\"";
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
out = "\"\"";
|
out = "\"\"";
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -1004,7 +1006,7 @@ bool idInterpreter::Execute( void ) {
|
||||||
// next statement
|
// next statement
|
||||||
st = &gameLocal.program.GetStatement( instructionPointer );
|
st = &gameLocal.program.GetStatement( instructionPointer );
|
||||||
|
|
||||||
if ( !IsGameDebuggerActive( this, &gameLocal.program, instructionPointer )
|
if ( !updateGameDebugger( this, &gameLocal.program, instructionPointer )
|
||||||
&& g_debugScript.GetBool( ) )
|
&& g_debugScript.GetBool( ) )
|
||||||
{
|
{
|
||||||
static int lastLineNumber = -1;
|
static int lastLineNumber = -1;
|
||||||
|
|
|
@ -3290,13 +3290,11 @@ static bool isDemo( void )
|
||||||
return sessLocal.IsDemoVersion();
|
return sessLocal.IsDemoVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
static DebuggerArgs_t userDebuggerArgs;
|
static bool updateDebugger( idInterpreter *interpreter, idProgram *program, int instructionPointer )
|
||||||
|
|
||||||
static bool checkForDebuggerBreakPoint( void )
|
|
||||||
{
|
{
|
||||||
if (com_editors & EDITOR_DEBUGGER)
|
if (com_editors & EDITOR_DEBUGGER)
|
||||||
{
|
{
|
||||||
DebuggerServerCheckBreakpoint( userDebuggerArgs.interpreter, userDebuggerArgs.program, userDebuggerArgs.instructionPointer );
|
DebuggerServerCheckBreakpoint( interpreter, program, instructionPointer );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -3323,9 +3321,8 @@ bool idCommonLocal::GetAdditionalFunction(idCommon::FunctionType ft, idCommon::F
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case idCommon::FT_CheckDebuggerBreakpoint:
|
case idCommon::FT_CheckDebuggerBreakpoint:
|
||||||
*out_fnptr = (idCommon::FunctionPointer)checkForDebuggerBreakPoint;
|
*out_fnptr = (idCommon::FunctionPointer)updateDebugger;
|
||||||
if (out_userArg != NULL )
|
|
||||||
*out_userArg = &userDebuggerArgs;
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -3339,13 +3336,10 @@ idGameCallbacks gameCallbacks;
|
||||||
|
|
||||||
idGameCallbacks::idGameCallbacks()
|
idGameCallbacks::idGameCallbacks()
|
||||||
: reloadImagesCB(NULL), reloadImagesUserArg(NULL)
|
: reloadImagesCB(NULL), reloadImagesUserArg(NULL)
|
||||||
, checkBreakPointCB(NULL), checkBreakPointUserArg(NULL)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void idGameCallbacks::Reset()
|
void idGameCallbacks::Reset()
|
||||||
{
|
{
|
||||||
reloadImagesCB = NULL;
|
reloadImagesCB = NULL;
|
||||||
reloadImagesUserArg = NULL;
|
reloadImagesUserArg = NULL;
|
||||||
checkBreakPointCB = NULL;
|
|
||||||
checkBreakPointUserArg = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,12 +117,6 @@ class idLangDict;
|
||||||
class idInterpreter;
|
class idInterpreter;
|
||||||
class idProgram;
|
class idProgram;
|
||||||
|
|
||||||
struct DebuggerArgs_t {
|
|
||||||
idInterpreter *interpreter;
|
|
||||||
idProgram *program;
|
|
||||||
int instructionPointer;
|
|
||||||
};
|
|
||||||
|
|
||||||
class idCommon {
|
class idCommon {
|
||||||
public:
|
public:
|
||||||
virtual ~idCommon( void ) {}
|
virtual ~idCommon( void ) {}
|
||||||
|
@ -277,6 +271,14 @@ public:
|
||||||
// it returns true if we're currently running the doom3 demo
|
// it returns true if we're currently running the doom3 demo
|
||||||
// not relevant for mods, only for game/ aka base.dll/base.so/...
|
// not relevant for mods, only for game/ aka base.dll/base.so/...
|
||||||
FT_IsDemo = 1,
|
FT_IsDemo = 1,
|
||||||
|
// the function's signature is bool fn(void) - no arguments.
|
||||||
|
// it returns true if the game debugger is active
|
||||||
|
// relevant for mods.
|
||||||
|
FT_DebuggerActive,
|
||||||
|
// the function's signature is bool fn(idInterpreter,idProgram,int) with arguments:
|
||||||
|
// idInterpreter *interpreter, idProgram *program, int instructionPointer
|
||||||
|
// it returns true if the game debugger is active.
|
||||||
|
// relevant for mods.
|
||||||
FT_CheckDebuggerBreakpoint,
|
FT_CheckDebuggerBreakpoint,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -43,10 +43,6 @@ struct idGameCallbacks {
|
||||||
ReloadImagesCallback reloadImagesCB;
|
ReloadImagesCallback reloadImagesCB;
|
||||||
void* reloadImagesUserArg;
|
void* reloadImagesUserArg;
|
||||||
|
|
||||||
typedef void ( *CheckBreakpointCallback )( void *userArg, idInterpreter *interpreter, idProgram *program, int instructionPointer );
|
|
||||||
CheckBreakpointCallback checkBreakPointCB;
|
|
||||||
void* checkBreakPointUserArg;
|
|
||||||
|
|
||||||
idGameCallbacks();
|
idGameCallbacks();
|
||||||
|
|
||||||
// called when Game DLL is unloaded (=> the registered callbacks become invalid)
|
// called when Game DLL is unloaded (=> the registered callbacks become invalid)
|
||||||
|
|
|
@ -270,18 +270,11 @@ bool IsDoom3DemoVersion()
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DebuggerArgs_t * userDebuggerArgs;
|
static bool ( *updateDebuggerFnPtr )( idInterpreter *interpreter, idProgram *program, int instructionPointer ) = NULL;
|
||||||
static bool ( *checkDebuggerBreakpointFnPtr )( void ) = NULL;
|
bool updateGameDebugger( idInterpreter *interpreter, idProgram *program, int instructionPointer ) {
|
||||||
bool IsGameDebuggerActive( idInterpreter *interpreter, idProgram *program, int instructionPointer )
|
|
||||||
{
|
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
if ( interpreter != nullptr && program != nullptr ) {
|
||||||
if (interpreter != nullptr && program != nullptr )
|
ret = updateDebuggerFnPtr ? updateDebuggerFnPtr( interpreter, program, instructionPointer ) : false;
|
||||||
{
|
|
||||||
userDebuggerArgs->interpreter = interpreter;
|
|
||||||
userDebuggerArgs->program = program;
|
|
||||||
userDebuggerArgs->instructionPointer = instructionPointer;
|
|
||||||
ret = checkDebuggerBreakpointFnPtr ? checkDebuggerBreakpointFnPtr( ) : false;
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -368,8 +361,7 @@ void idGameLocal::Init( void ) {
|
||||||
// DG: hack to support the Demo version of Doom3
|
// DG: hack to support the Demo version of Doom3
|
||||||
common->GetAdditionalFunction(idCommon::FT_IsDemo, (idCommon::FunctionPointer*)&isDemoFnPtr, NULL);
|
common->GetAdditionalFunction(idCommon::FT_IsDemo, (idCommon::FunctionPointer*)&isDemoFnPtr, NULL);
|
||||||
//debugger support
|
//debugger support
|
||||||
common->GetAdditionalFunction( idCommon::FT_CheckDebuggerBreakpoint,
|
common->GetAdditionalFunction(idCommon::FT_CheckDebuggerBreakpoint,(idCommon::FunctionPointer*) &updateDebuggerFnPtr,NULL);
|
||||||
( idCommon::FunctionPointer * ) &checkDebuggerBreakpointFnPtr, (void**)&userDebuggerArgs );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -293,7 +293,7 @@ public:
|
||||||
|
|
||||||
idEntityPtr<idEntity> lastGUIEnt; // last entity with a GUI, used by Cmd_NextGUI_f
|
idEntityPtr<idEntity> lastGUIEnt; // last entity with a GUI, used by Cmd_NextGUI_f
|
||||||
int lastGUI; // last GUI on the lastGUIEnt
|
int lastGUI; // last GUI on the lastGUIEnt
|
||||||
int editors; // Mirrored editors flags from common to determine which editors are running
|
|
||||||
// ---------------------- Public idGame Interface -------------------
|
// ---------------------- Public idGame Interface -------------------
|
||||||
|
|
||||||
idGameLocal();
|
idGameLocal();
|
||||||
|
|
|
@ -36,7 +36,7 @@ If you have questions concerning this license or the applicable additional terms
|
||||||
#include "framework/FileSystem.h"
|
#include "framework/FileSystem.h"
|
||||||
|
|
||||||
// HvG: Debugger support
|
// HvG: Debugger support
|
||||||
extern bool IsGameDebuggerActive( idInterpreter *interpreter, idProgram *program, int instructionPointer );
|
extern bool updateGameDebugger( idInterpreter *interpreter, idProgram *program, int instructionPointer );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
|
@ -1007,7 +1007,7 @@ bool idInterpreter::Execute( void ) {
|
||||||
// next statement
|
// next statement
|
||||||
st = &gameLocal.program.GetStatement( instructionPointer );
|
st = &gameLocal.program.GetStatement( instructionPointer );
|
||||||
|
|
||||||
if ( !IsGameDebuggerActive( this, &gameLocal.program, instructionPointer )
|
if ( !updateGameDebugger( this, &gameLocal.program, instructionPointer )
|
||||||
&& g_debugScript.GetBool( ) )
|
&& g_debugScript.GetBool( ) )
|
||||||
{
|
{
|
||||||
static int lastLineNumber = -1;
|
static int lastLineNumber = -1;
|
||||||
|
|
|
@ -147,8 +147,11 @@ Starts up the debugger server
|
||||||
*/
|
*/
|
||||||
bool DebuggerServerInit ( void )
|
bool DebuggerServerInit ( void )
|
||||||
{
|
{
|
||||||
|
com_enableDebuggerServer.ClearModified( );
|
||||||
|
|
||||||
// Dont do this if we are in the debugger already
|
// Dont do this if we are in the debugger already
|
||||||
if ( com_editors & EDITOR_DEBUGGER )
|
if ( gDebuggerServer != NULL
|
||||||
|
|| ( com_editors & EDITOR_DEBUGGER ) )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -168,8 +171,6 @@ bool DebuggerServerInit ( void )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
com_enableDebuggerServer.ClearModified( );
|
|
||||||
|
|
||||||
// Start the debugger server thread
|
// Start the debugger server thread
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||||
gDebuggerServerThread = SDL_CreateThread( DebuggerServerThread, "DebuggerServer", NULL );
|
gDebuggerServerThread = SDL_CreateThread( DebuggerServerThread, "DebuggerServer", NULL );
|
||||||
|
@ -177,7 +178,6 @@ bool DebuggerServerInit ( void )
|
||||||
gDebuggerServerThread = SDL_CreateThread( DebuggerServerThread, NULL );
|
gDebuggerServerThread = SDL_CreateThread( DebuggerServerThread, NULL );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue