partial fix for dynamic natives when running on debug mode
This commit is contained in:
parent
4b51565e3b
commit
0d3055e505
@ -935,8 +935,9 @@ int Handler::HandleModule(const char *module)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
cell hea_addr, *phys_addr, retval;
|
cell hea_addr, *phys_addr, retval;
|
||||||
|
Debugger *pd;
|
||||||
|
|
||||||
DisableDebugHandler(m_pAmx);
|
pd = DisableDebugHandler(m_pAmx);
|
||||||
|
|
||||||
//temporarily set prenit
|
//temporarily set prenit
|
||||||
m_pAmx->flags |= AMX_FLAG_PRENIT;
|
m_pAmx->flags |= AMX_FLAG_PRENIT;
|
||||||
@ -945,7 +946,7 @@ int Handler::HandleModule(const char *module)
|
|||||||
amx_Release(m_pAmx, hea_addr);
|
amx_Release(m_pAmx, hea_addr);
|
||||||
m_pAmx->flags &= ~AMX_FLAG_PRENIT;
|
m_pAmx->flags &= ~AMX_FLAG_PRENIT;
|
||||||
|
|
||||||
EnableDebugHandler(m_pAmx);
|
EnableDebugHandler(m_pAmx, pd);
|
||||||
|
|
||||||
if (err != AMX_ERR_NONE)
|
if (err != AMX_ERR_NONE)
|
||||||
return 0;
|
return 0;
|
||||||
@ -1012,7 +1013,7 @@ int Handler::HandleNative(const char *native, int index, int trap)
|
|||||||
if (pDebugger && trap)
|
if (pDebugger && trap)
|
||||||
pDebugger->EndExec();
|
pDebugger->EndExec();
|
||||||
else if (pDebugger && !trap)
|
else if (pDebugger && !trap)
|
||||||
EnableDebugHandler(m_pAmx);
|
EnableDebugHandler(m_pAmx, pDebugger);
|
||||||
|
|
||||||
amx_Release(m_pAmx, hea_addr);
|
amx_Release(m_pAmx, hea_addr);
|
||||||
|
|
||||||
|
@ -454,7 +454,8 @@ int set_amxnatives(AMX* amx, char error[128])
|
|||||||
int idx, err;
|
int idx, err;
|
||||||
cell retval;
|
cell retval;
|
||||||
|
|
||||||
DisableDebugHandler(amx);
|
Debugger *pd;
|
||||||
|
pd = DisableDebugHandler(amx);
|
||||||
|
|
||||||
if (amx_FindPublic(amx, "plugin_natives", &idx) == AMX_ERR_NONE)
|
if (amx_FindPublic(amx, "plugin_natives", &idx) == AMX_ERR_NONE)
|
||||||
{
|
{
|
||||||
@ -465,7 +466,7 @@ int set_amxnatives(AMX* amx, char error[128])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EnableDebugHandler(amx);
|
EnableDebugHandler(amx, pd);
|
||||||
|
|
||||||
amx->flags &= ~(AMX_FLAG_PRENIT);
|
amx->flags &= ~(AMX_FLAG_PRENIT);
|
||||||
|
|
||||||
@ -1783,20 +1784,24 @@ void *Module_ReqFnptr(const char *funcName)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisableDebugHandler(AMX *amx)
|
Debugger *DisableDebugHandler(AMX *amx)
|
||||||
{
|
{
|
||||||
|
Debugger *pd = static_cast<Debugger *>(amx->userdata[UD_DEBUGGER]);
|
||||||
|
|
||||||
|
amx->userdata[UD_DEBUGGER] = NULL;
|
||||||
|
amx->flags &= ~(AMX_FLAG_DEBUG);
|
||||||
amx_SetDebugHook(amx, NULL);
|
amx_SetDebugHook(amx, NULL);
|
||||||
|
|
||||||
|
return pd;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnableDebugHandler(AMX *amx)
|
void EnableDebugHandler(AMX *amx, Debugger *pd)
|
||||||
{
|
{
|
||||||
if (amx->flags & AMX_FLAG_DEBUG)
|
if (pd)
|
||||||
{
|
amx->flags |= AMX_FLAG_DEBUG;
|
||||||
if (amx->userdata[UD_DEBUGGER] != NULL)
|
|
||||||
{
|
amx->userdata[UD_DEBUGGER] = pd;
|
||||||
amx_SetDebugHook(amx, &Debugger::DebugHook);
|
amx_SetDebugHook(amx, &Debugger::DebugHook);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined MEMORY_TEST && !defined WIN32
|
#if !defined MEMORY_TEST && !defined WIN32
|
||||||
|
@ -73,8 +73,11 @@ typedef enum
|
|||||||
|
|
||||||
int CheckModules(AMX *amx, char error[128]);
|
int CheckModules(AMX *amx, char error[128]);
|
||||||
const char *StrCaseStr(const char *as, const char *bs);
|
const char *StrCaseStr(const char *as, const char *bs);
|
||||||
void DisableDebugHandler(AMX *amx);
|
|
||||||
void EnableDebugHandler(AMX *amx);
|
class Debugger;
|
||||||
|
Debugger *DisableDebugHandler(AMX *amx);
|
||||||
|
void EnableDebugHandler(AMX *amx, Debugger *pd);
|
||||||
|
|
||||||
const char* GetFileName(AMX *amx);
|
const char* GetFileName(AMX *amx);
|
||||||
|
|
||||||
#endif // __MODULES_H__
|
#endif // __MODULES_H__
|
||||||
|
Loading…
Reference in New Issue
Block a user