وقف تنفيذ البرنامج والذهاب إلى المصحح دون تحديد نقاط (Visual Studio/دول مجلس التعاون الخليجي و C++)

StackOverflow https://stackoverflow.com/questions/1428493

سؤال

لقد وجدت معلومات عن هذه الميزة على ذلك منذ بعض الوقت ، ولكن الموضوع مكرر من ملامح خفية من Visual Studio (2005-2008)? وأنا لا يمكن العثور عليه بعد الآن.

أريد أن استخدام شيء مثل هذا:

#ifdef DEBUG
#define break_here(condition) if (condition) ... // don't remember, what must be here
#else
#define break_here(condition) if (condition) return H_FAIL;
#endif
//...
hresult = do_something(...);
break_here(hresult != H_OK);
//...
var = do_other_thing(...);
break_here(var > MAX_VAR);

يجب أن تتصرف مثل توقف على خطأ.انها شيء مثل التأكيد, ولكن لا الحوارات و أكثر خفيفة الوزن.

لا أستطيع استخدام عادي نقاط التوقف هنا لأن الوحدة هي جزء من عدة مشاريع يمكن تحريرها في عدة VS الحلول.هذا يسبب نقاط ، التي أنشئت في حل واحد ، التحول في مكان ما في المصدر ، عندما رمز تحريرها في حل آخر.

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

المحلول

ونلقي نظرة على DebugBreak

<اقتباس فقرة>   

وأسباب استثناء نقطة توقف تحدث في العملية الحالية. وهذا يسمح للترابط استدعاء للإشارة إلى المصحح لمعالجة الاستثناء.

وعلى سبيل المثال:

 var = do_other_thing(...);
 if (var > MAX_VAR)
      DebugBreak();

نصائح أخرى

وربما هذا من شأنه أن يساعد على: كيفية إضافة نقطة توقف الشرطي في Visual C ++

أنسى أحتاج الذراع يبني أيضا واحد منهم هو جمع لا في MS Visual Studio :)

وعلاوة على ذلك, إنه من الأفضل لي أن لا رابط تعليمات برمجية إضافية في المكتبة-نسخة من وحدة بلدي.الحاجة إلى إدراج "winbase.ح" من أجل DebugBreak() كان "سيئا" ، أفضل أن يكون بعض الجوهرية.ولكن هذا هو قليلا "سيئا", لأنه لن يكون هناك أي نقاط في الإصدار النهائي :)

مع مساعدة من crashmstr's الإجابة لقد وجدت بدائل DebugBreak().و الآن أنا باستخدام وبناء التالية:

#ifdef _DEBUG

    #ifdef _MSC_VER
      #ifdef _X86_
        #define myDebugBreak { __asm { int 3 } }
      #else
        #define myDebugBreak  { __debugbreak(); } // need <intrin.h>
      #endif
    #else
      #define myDebugBreak { asm { trap } } // GCC/XCode ARM11 variant
    #endif

#else

      #define myDebugBreak

#endif

#define break_here(condition) if (condition) { myDebugBreak; return H_FAIL; }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top