1212#define UE_MODULEx86 0x2000 ;
1313#define UE_MODULEx64 0x2000 ;
1414
15+ static void engineStep ()
16+ {
17+ EnterCriticalSection (&engineStepActiveCr);
18+ if (engineStepActive)
19+ {
20+ DBGCode = DBG_CONTINUE ;
21+ if (engineStepCount == 0 )
22+ {
23+ typedef void (TITCALL * fCustomBreakPoint )(void );
24+ auto cbStep = fCustomBreakPoint (engineStepCallBack);
25+ engineStepActive = false ;
26+ engineStepCallBack = NULL ;
27+ LeaveCriticalSection (&engineStepActiveCr);
28+ cbStep ();
29+ }
30+ else
31+ {
32+ SingleStep (engineStepCount, engineStepCallBack);
33+ LeaveCriticalSection (&engineStepActiveCr);
34+ }
35+ }
36+ else
37+ {
38+ LeaveCriticalSection (&engineStepActiveCr);
39+ }
40+ }
41+
1542__declspec (dllexport) void TITCALL DebugLoop()
1643{
1744 bool FirstBPX = true ;
@@ -642,20 +669,7 @@ __declspec(dllexport) void TITCALL DebugLoop()
642669 EnableBPX (ResetBPXAddressTo);
643670 ResetBPXAddressTo = NULL ;
644671 ResetBPX = false ;
645- if (engineStepActive)
646- {
647- if (engineStepCount == 0 )
648- {
649- myCustomBreakPoint = (fCustomBreakPoint )(engineStepCallBack);
650- engineStepActive = false ;
651- engineStepCallBack = NULL ;
652- myCustomBreakPoint ();
653- }
654- else
655- {
656- SingleStep (engineStepCount, engineStepCallBack);
657- }
658- }
672+ engineStep ();
659673 }
660674 else
661675 {
@@ -671,20 +685,7 @@ __declspec(dllexport) void TITCALL DebugLoop()
671685 {
672686 ResetHwBPX = false ;
673687 SetHardwareBreakPoint (DebugRegisterX.DrxBreakAddress , DebugRegisterXId, DebugRegisterX.DrxBreakPointType , DebugRegisterX.DrxBreakPointSize , (LPVOID )DebugRegisterX.DrxCallBack );
674- if (engineStepActive)
675- {
676- if (engineStepCount == 0 )
677- {
678- myCustomBreakPoint = (fCustomBreakPoint )(engineStepCallBack);
679- engineStepActive = false ;
680- engineStepCallBack = NULL ;
681- myCustomBreakPoint ();
682- }
683- else
684- {
685- SingleStep (engineStepCount, engineStepCallBack);
686- }
687- }
688+ engineStep ();
688689 }
689690 if (ResetMemBPX) // restore memory breakpoint
690691 {
@@ -719,20 +720,7 @@ __declspec(dllexport) void TITCALL DebugLoop()
719720 VirtualProtectEx (dbgProcessInformation.hProcess , (LPVOID )ResetMemBPXAddress, ResetMemBPXSize, NewProtect, &OldProtect);
720721 }
721722
722- if (engineStepActive)
723- {
724- if (engineStepCount == 0 )
725- {
726- myCustomBreakPoint = (fCustomBreakPoint )(engineStepCallBack);
727- engineStepActive = false ;
728- engineStepCallBack = NULL ;
729- myCustomBreakPoint ();
730- }
731- else
732- {
733- SingleStep (engineStepCount, engineStepCallBack);
734- }
735- }
723+ engineStep ();
736724 }
737725 }
738726 else // no resetting needed (debugger reached hardware breakpoint or the user stepped)
@@ -867,21 +855,7 @@ __declspec(dllexport) void TITCALL DebugLoop()
867855 if (strstr (DisassembledString, " PUSHF" ))
868856 PushfBPX = true ;
869857 }
870- if (engineStepActive)
871- {
872- DBGCode = DBG_CONTINUE ;
873- if (engineStepCount == 0 )
874- {
875- myCustomBreakPoint = (fCustomBreakPoint )(engineStepCallBack);
876- engineStepActive = false ;
877- engineStepCallBack = NULL ;
878- myCustomBreakPoint ();
879- }
880- else
881- {
882- SingleStep (engineStepCount, engineStepCallBack);
883- }
884- }
858+ engineStep ();
885859 }
886860 if (DBGCode == DBG_EXCEPTION_NOT_HANDLED ) // NOTE: only call the chSingleStep callback when the debuggee generated the exception
887861 {
0 commit comments