diff --git a/src/core/arm/skyeye_common/armstate.cpp b/src/core/arm/skyeye_common/armstate.cpp
index dd388d38a..8a0e43a21 100644
--- a/src/core/arm/skyeye_common/armstate.cpp
+++ b/src/core/arm/skyeye_common/armstate.cpp
@@ -7,7 +7,7 @@
 #include "common/swap.h"
 #include "core/arm/skyeye_common/armstate.h"
 #include "core/arm/skyeye_common/vfp/vfp.h"
-#include "core/gdbstub/gdbstub.h"
+#include "core/core.h"
 #include "core/memory.h"
 
 ARMul_State::ARMul_State(PrivilegeMode initial_mode) {
@@ -595,3 +595,18 @@ void ARMul_State::WriteCP15Register(u32 value, u32 crn, u32 opcode_1, u32 crm, u
         CP15[CP15_THREAD_UPRW] = value;
     }
 }
+
+void ARMul_State::ServeBreak() {
+    if (GDBStub::IsServerEnabled()) {
+        if (last_bkpt_hit) {
+            Reg[15] = last_bkpt.address;
+        }
+        Kernel::Thread* thread = Kernel::GetCurrentThread();
+        Core::CPU().SaveContext(thread->context);
+        if (last_bkpt_hit || GDBStub::GetCpuStepFlag()) {
+            last_bkpt_hit = false;
+            GDBStub::Break();
+            GDBStub::SendTrap(thread, 5);
+        }
+    }
+}
diff --git a/src/core/arm/skyeye_common/armstate.h b/src/core/arm/skyeye_common/armstate.h
index cca754b31..2f99b738b 100644
--- a/src/core/arm/skyeye_common/armstate.h
+++ b/src/core/arm/skyeye_common/armstate.h
@@ -21,7 +21,6 @@
 #include <unordered_map>
 #include "common/common_types.h"
 #include "core/arm/skyeye_common/arm_regformat.h"
-#include "core/core.h"
 #include "core/gdbstub/gdbstub.h"
 
 // Signal levels
@@ -196,20 +195,7 @@ public:
         last_bkpt_hit = true;
     }
 
-    void ServeBreak() {
-        if (GDBStub::IsServerEnabled()) {
-            if (last_bkpt_hit) {
-                Reg[15] = last_bkpt.address;
-            }
-            Kernel::Thread* thread = Kernel::GetCurrentThread();
-            Core::CPU().SaveContext(thread->context);
-            if (last_bkpt_hit || GDBStub::GetCpuStepFlag()) {
-                last_bkpt_hit = false;
-                GDBStub::Break();
-                GDBStub::SendTrap(thread, 5);
-            }
-        }
-    }
+    void ServeBreak();
 
     std::array<u32, 16> Reg{}; // The current register file
     std::array<u32, 2> Reg_usr{};
diff --git a/src/core/gdbstub/gdbstub.cpp b/src/core/gdbstub/gdbstub.cpp
index ddf306207..cc8fc9ffb 100644
--- a/src/core/gdbstub/gdbstub.cpp
+++ b/src/core/gdbstub/gdbstub.cpp
@@ -128,7 +128,7 @@ static u32 command_length;
 static u32 latest_signal = 0;
 static bool memory_break = false;
 
-Kernel::Thread* current_thread = nullptr;
+static Kernel::Thread* current_thread = nullptr;
 
 // Binding to a port within the reserved ports range (0-1023) requires root permissions,
 // so default to a port outside of that range.
@@ -173,9 +173,9 @@ static u32 RegRead(std::size_t id, Kernel::Thread* thread = nullptr) {
     }
 
     if (id <= PC_REGISTER) {
-        return thread->context.get()->GetCpuRegister(id);
+        return thread->context->GetCpuRegister(id);
     } else if (id == CPSR_REGISTER) {
-        return thread->context.get()->GetCpsr();
+        return thread->context->GetCpsr();
     } else {
         return 0;
     }
@@ -187,9 +187,9 @@ static void RegWrite(std::size_t id, u32 val, Kernel::Thread* thread = nullptr)
     }
 
     if (id <= PC_REGISTER) {
-        return thread->context.get()->SetCpuRegister(id, val);
+        return thread->context->SetCpuRegister(id, val);
     } else if (id == CPSR_REGISTER) {
-        return thread->context.get()->SetCpsr(val);
+        return thread->context->SetCpsr(val);
     }
 }
 
@@ -199,12 +199,11 @@ static u64 FpuRead(std::size_t id, Kernel::Thread* thread = nullptr) {
     }
 
     if (id >= D0_REGISTER && id < FPSCR_REGISTER) {
-        u64 ret = thread->context.get()->GetFpuRegister(2 * (id - D0_REGISTER));
-        ret |= static_cast<u64>(thread->context.get()->GetFpuRegister(2 * (id - D0_REGISTER) + 1))
-               << 32;
+        u64 ret = thread->context->GetFpuRegister(2 * (id - D0_REGISTER));
+        ret |= static_cast<u64>(thread->context->GetFpuRegister(2 * (id - D0_REGISTER) + 1)) << 32;
         return ret;
     } else if (id == FPSCR_REGISTER) {
-        return thread->context.get()->GetFpscr();
+        return thread->context->GetFpscr();
     } else {
         return 0;
     }
@@ -216,10 +215,10 @@ static void FpuWrite(std::size_t id, u64 val, Kernel::Thread* thread = nullptr)
     }
 
     if (id >= D0_REGISTER && id < FPSCR_REGISTER) {
-        thread->context.get()->SetFpuRegister(2 * (id - D0_REGISTER), (u32)val);
-        thread->context.get()->SetFpuRegister(2 * (id - D0_REGISTER) + 1, val >> 32);
+        thread->context->SetFpuRegister(2 * (id - D0_REGISTER), (u32)val);
+        thread->context->SetFpuRegister(2 * (id - D0_REGISTER) + 1, val >> 32);
     } else if (id == FPSCR_REGISTER) {
-        return thread->context.get()->SetFpscr(static_cast<u32>(val));
+        return thread->context->SetFpscr(static_cast<u32>(val));
     }
 }
 
@@ -531,8 +530,7 @@ static void HandleQuery() {
         std::string val = "m";
         const auto& threads = Kernel::GetThreadList();
         for (const auto& thread : threads) {
-            val += fmt::format("{:x}", thread->GetThreadId());
-            val += ",";
+            val += fmt::format("{:x},", thread->GetThreadId());
         }
         val.pop_back();
         SendReply(val.c_str());
@@ -1214,13 +1212,15 @@ void SetCpuStepFlag(bool is_step) {
 }
 
 void SendTrap(Kernel::Thread* thread, int trap) {
-    if (send_trap) {
-        if (!halt_loop || current_thread == thread) {
-            current_thread = thread;
-            SendSignal(thread, trap);
-        }
-        halt_loop = true;
-        send_trap = false;
+    if (!send_trap) {
+        return;
     }
+
+    if (!halt_loop || current_thread == thread) {
+        current_thread = thread;
+        SendSignal(thread, trap);
+    }
+    halt_loop = true;
+    send_trap = false;
 }
 }; // namespace GDBStub