سؤال

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

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

while(true) { }

أبقيت العملية حية، وبعد ذلك تمكنت من "تعيين البيان التالي" باستخدام مصحح الأخطاء، لكن بدا الأمر محرجًا ووقحًا.

Console.ReadLine();

بدا من الغريب الكتابة نظرًا لعدم وجود وحدة تحكم يمكنني الضغط عليها يدخل في.(لم ينجح الأمر أيضًا.قم بتعيين العبارة التالية ثم تشغيلها ليعيدك إلى انتظار ReadLine().)

إذن ما هو نوع الكود الذي يمكنني إدراجه في برنامج .NET/CLR/C# الذي يقول "انتظر هنا حتى أتمكن من إرفاقه بمصحح أخطاء"؟

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

المحلول

يمكنك استخدام ال System.Diagnostics.Debugger.IsAttached خاصية للتحقق مما إذا كان مصحح الأخطاء متصلاً بالعملية.سينتظر هذا التطبيق حتى يتم إرفاق مصحح الأخطاء:

using System;
using System.Diagnostics;
using System.Threading;

namespace DebugApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Waiting for debugger to attach");
            while (!Debugger.IsAttached)
            {
                Thread.Sleep(100);
            }
            Console.WriteLine("Debugger attached");
        }
    }
}

نصائح أخرى

يبدو هذا بالضبط ما تحتاجه:

Debugger.Launch();

http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.launch.aspx

"يتم تشغيل مصحح الأخطاء وإرفاقه بالعملية."

لا أعرف، لأنني لم أجربه من قبل ولكن أتساءل عما إذا كان بإمكانك استخدامه System.Diagnostics.Debugger.Break() من أجل الوصول إلى نقطة توقف ثم الانتظار حتى يتم إرفاق مصحح الأخطاء.أفترض أن مصحح الأخطاء عن بعد سيعمل، لكنني لا أعرف على وجه اليقين ولا أستطيع حاليًا الوصول إلى بيئة منزلي حيث يمكنني بسهولة محاكاة ذلك واختبار نظريتي.هناك مقالة MSDN نتحدث عن استخدامه في تطبيق ASP.Net لذا أتصور أنه سيعمل.

يعمل إرفاق مصحح الأخطاء عن بعد تمامًا مثل استخدام مصحح الأخطاء المحلي.

أولاً قم بالأمر المعتاد:

System.Diagnostics.Debugger.Launch();

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

Debug.Assert(true);

يجب أن تعمل أيضا على ما أعتقد.بالمناسبة، أنا أيضًا أواجه هذه المشكلة أحيانًا، وهذا ما أفعله

MessageBox.Show() 

:ف :ص

قم بتعيين مهلة تمنحك الوقت لإرفاق مصحح الأخطاء.

Thread.Sleep(30000);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top