سؤال

أريد أن أكون قادرا على رؤية ختم زمني في بداية كل تتبع في نافذة Debug في Visual Studio.

 [Time stamp here] The thread 'Win32 Thread' (0xcd0) has exited with code 0 (0x0).

 [Time stamp here] => CLR ProvideAssembly: AppDomainId: 1, Ref: 'msvcm90d...

مثال على هذا هو تطبيق SYSINTERNALS - Debugview.. وبعد المشكلة هي أنه لا يمكنني الحصول على تصحيح تصحيحات Visual Studio، والاستماع باستخدام Debugview في نفس الوقت، وأنا غير مرتاح للإضافة في الطابع الزمني يدويا إلى Tracers My Tracers.

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

المحلول

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

إليك كيفية عمل ذلك: أولا، قم بإنشاء الوظيفة الإضافية أو ماكرو Visual Studio أو ماكرو paneupdated حدث جزء نشط نافذة Outlook. (يرى هذا الموضوع لكيفية القيام بذلك مع نهج ماكرو). تأكد من التحقق، في معالج الأحداث، ذلك pane.Name == "Debug" وتجاهل الأجزاء الأخرى. ثانيا، عند اكتشاف نص جديد في جزء إخراج التصحيح، إلحاق خط الطابع الزمني، مثل هذا:

public void AddTimestamp(DTE2 dte)
{
    // Retrieve and show the Output window.
    OutputWindow outWin = dte.ToolWindows.OutputWindow;

    pane = outWin.OutputWindowPanes.Item("Debug");
    }
    catch
    {
        pane = outWin.OutputWindowPanes.Add("Debug");
    }

    pane.OutputString("[timestamp: " + DateTime.Now.ToString() + "]\n");
}

من الممكن أيضا تحديد طابع طابع طويل إلى كل سطر، لكنه أصعب كثيرا. لا يمكنك تغيير النص بالفعل في نافذة الإخراج (إنه قرئي فقط)، ولكن يمكنك مسح النافذة ويمكنك إضافة نص. لذلك يمكنك استخدام نفس نهج معالج الأحداث أعلاه للكشف عن تغييرات النص، ولكن بدلا من إلحاقك بإمكانية نسخ النص الحالي، قم بإعداد الطوابع الزمنية إلى أي خطوط لا تملك الطوابع الزمنية بالفعل، واضحة النافذة، وإعادة إضافة الآن -With-TimEstamps النص. المشكلة مع هذا هو الأداء بمجرد أن تصبح نافذة الإخراج كبيرة. لذلك من المحتمل أن تضطر إلى تنفيذ نوع من "ختم كسول" الذي يقوم بوضوح وإدخاله في الخلفية، من أجل تجنب قتل IDE الخاص بك عندما يكون (كما هو شائع) 100 من خطوط إخراج التصحيح ينبعث منها في وقت قصير وبعد أيضا، عند مسح وإعادة إضافة، إذا كنت تقوم حاليا باختيار نص في نافذة الإخراج، فقد اختيارك.

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

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

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

نصائح أخرى

لإضافة إجابة جديدة إلى عتيق السؤال، هناك ميزة في أدوات السلطة الإنتاجية 2013 التمديد و أدوات الطاقة الإنتاجية 2015 التمديد أن إضافة هامش الطابع الزمني إلى نافذة الإخراج، لا يوجد رمز مطلوب.

كنت أبحث عن نفس الوظيفة. جاء زميل لي مع $TICK ماكرو في حقل الرسالة، وطباعة علامات وحدة المعالجة المركزية الحالية "الحالية".

إلقاء نظرة على هذه النصائح من سيمون تشابمان, ، جدا.

أردت هذه الوظيفة أيضا، لذلك كتبت في النهاية تمديدا للقيام بذلك (مثل جوستين جرانت المقترحة في الإجابة المقبولة). بعد استخدامه لفترة من الوقت، قررت أن الطوابع الزمنية النسبية كانت مفيدة بالنسبة لي عند تصحيح الأخطاء. إذا أراد الناس الطوابع الزمنية المطلقة، فأنا متأكد من أنني أستطيع أن أضيف هذه الوظيفة مرة أخرى. على أي حال، إذا كنت مهتما يمكنك التحقق من ذلك في niahtextfilter.com..

وإظهار الطوابع الزمنية النسبية في العمل في جلسة تصحيح Visual Studio:Niah Text Filter debug output

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