سؤال

أنا أستخدم Visual Studio، وأقوم بتطوير تطبيق أصلي، ولدي نقطة توقف برمجية (تأكيد) في الكود الخاص بي الموضوعة باستخدام __asm ​​int 3 أو __debugbreak.في بعض الأحيان عندما أقوم بالضغط عليه، أرغب في تعطيله حتى لا تقتحم الزيارات المتتالية في نفس جلسة تصحيح الأخطاء مصحح الأخطاء.كيف يمكنني أن أفعل هذا؟

هل كانت مفيدة؟

المحلول

x86 / x64

بافتراض أنك تكتب تطبيق x86/x64، اكتب ما يلي في نافذة ساعتك:

x86: *(char *)eip,x

x64: *(char *)rip,x

يجب أن تشاهد القيمة 0xcc، وهي رمز التشغيل لـ INT 3.استبدله بـ 0x90، وهو رمز التشغيل لـ NOP.يمكنك أيضًا استخدام نافذة الذاكرة مع eip كعنوان.

قدرة شرائية

بافتراض أنك تكتب تطبيق PPC (على سبيل المثال.Xbox 360)، اكتب ما يلي في نافذة ساعتك:

*(int *)iar,x

يجب أن تشاهد القيمة 0xfeNNNNNN، وهي شفرة تشغيل للملاءمة (في أغلب الأحيان 0x0fe00016 = اعتراض غير مشروط).استبدله بـ 0x60000000، وهو رمز التشغيل لـ NOP.

نصائح أخرى

يمكنك تجربة شيء مثل هذا:

#define ASSERT(x) {\
   if (!(x)) \
   { \
      static bool ignore = false; \
      if (!ignore) \
      { \
         ignore = true; \
         __asm int 3 \
      } \
   }\
}

يجب أن يصل هذا إلى تصحيح الأخطاء مرة واحدة فقط.يمكنك أيضًا إظهار مربع رسالة للمستخدم والسؤال عما يجب فعله:متابعة (لا يحدث شيء)، أو استراحة (يتم استدعاء int 3) أو تجاهل (يتم تعيين التجاهل على القيمة true، ولا يتم الوصول إلى نقطة التوقف مرة أخرى أبدًا)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top