غريبة البرنامج شنق, ماذا يعني هذا في التصحيح ؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

غريبة البرنامج شنق, ماذا يعني هذا في التصحيح ؟

بعد ربط windbg وجدت ما يلي:

(1714.258): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=015b5c74 ebx=178a13e0 ecx=dddddddd edx=009a8ca0 esi=09fbf698 edi=09fbf594
eip=005ae2f7 esp=09fbf4a4 ebp=09fbf594 iopl=0         nv up ei ng nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010286
TestApplication!std::_Container_base::_Orphan_all+0x57:
005ae2f7 c70100000000    mov     dword ptr [ecx],0    ds:0023:dddddddd=????????

استدعاء المكدس:

TestApplication!std::_Container_base::_Orphan_all+0x57
TestApplication!std::vector >::operator=+0x37
TestApplication!boost::asio::detail::win_iocp_io_service::do_one+0x189
TestApplication!boost::asio::detail::win_iocp_io_service::run+0xa2
TestApplication!boost::asio::io_service::run+0x3a
هل كانت مفيدة؟

المحلول

المشكلة

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

  2. في هذه الحالة الاستثناء هو "انتهاك وصول".هذا يعني أن البرنامج يحاول القراءة / الكتابة من غير موقع الذاكرة.

  3. الوصول إلى انتهاكات خطيرة لأنه يمكن إتلاف بعض الذاكرة وهو أمر حاسم لهذا البرنامج و هذا من شأنه أن يكون السبب المرجح أن توقف البرنامج.

  4. من المسبب التعليمات يبدو كما لو كنت تحاول الحصول على محتويات 4 بايت قيمة من تعليمة غير قانونية.

تصحيح المشكلة

  1. إذا كان هذا هو الكود الخاص بك ثم يمكنك بسهولة تصحيح هذه المشكلة عن طريق وضع التصحيح رمز موقع المجلد الإخراج الخاص بك مترجم (هذا من شأنه أن يتضمن ذات الصلة ملفات pdb)

  2. عندما تحصل على هذا الاستثناء على مكدس الاستدعاءات (واحد من عرض ويندوز سيكون لديك)

  3. هذا سوف تظهر لك مكان في التعليمات البرمجية الخاصة بك حيث المسببة المكدس قد نشأت.

  4. الآن افتح ملف الذي يحتوي على هذا المصدر و تعيين نقطة توقف هناك برنامج ضرب هذه النقطة ووقف داخل windebugger.التصحيح من هذه النقطة و كنت أعرف بالضبط من الذي سطر من التعليمات البرمجية هذا الانتهاك يتم طرح

Tip :دفعة يأتي مع المصدر بحيث يمكنك بسهولة وضع نقطة فاصل داخل هذا القانون.تأكد من الضغط على F11 حين التصحيح عندما تحصل على اسيو::التفاصيل::win_iocp_io_service::do_one.

نصائح أخرى

إذا كنت تستخدم MSVC والتكوين التصحيح بناء، يعني 0xdddddddd عادة ما الذي تحاول الوصول إلى ذاكرة محررة. إدارة الذاكرة CRT التصحيح يملأ الذاكرة الحرة مع 0xdd.

والسجل ECX لديه عنوان غير صالح (DDDDDDDD). أود أن أقترح هذا هو حالة تلف الذاكرة. النظر في تحويل GFLAGS على للعملية.

مكدس الاستدعاءات تماما STL/دفعة رمز.إلا إن شيئا ما تفعله هو للخروج من العادية ، لن نفترض أن الخلل هو في أي قسم من مكدس الاستدعاءات قمت بلصقه.

زوجين من الأشياء للتحقق:

  1. أي دفعة محددة #تعرف أنه يجب أن تكون محددة ولكن تخلخل?

  2. تأمين SCL & مكرر التصحيح.في محاولة لتمكين/تعطيل ذلك.

  3. هل خلط التصحيح & الإفراج عن رمز.(فكرة سيئة مع المحكمة الخاصة بلبنان/دفعة حاويات)

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