كيفية التتبع والتصحيح في Visual C#


للحصول على إصدار Microsoft Visual Basic.NET من هذه المقالة، راجع
313417 .

ملخص


توضح هذه المقالة كيفية استخدام فئات التتبع و التصحيح . تتوفر هذه الفئات في Microsoft.NET Framework. يمكنك استخدام هذه الفئات لتوفير معلومات حول أداء التطبيق أثناء تطوير التطبيق أو بعد نشر الإنتاج. هذه الفئات هي جزء واحد فقط من ميزات آلات المتوفرة في.NET Framework.


العودة إلى أعلى

متطلبات

توضح القائمة التالية الأجهزة الموصى بها برامج البنية الأساسية للشبكة وحزم الخدمات التي تحتاجها:
  • نظام التشغيل Microsoft Windows 2000 أو نظام التشغيل Microsoft Windows XP أو نظام التشغيل Microsoft Windows Server 2003
  • Microsoft Visual C#
تفترض هذه المقالة أنك معتاد على تصحيح البرنامج أيضا.

العودة إلى أعلى

وصف للتقنية


توضح الخطوات الموجودة في المقطع إنشاء نموذج باستخدام "فئة التصحيح"كيفية إنشاء تطبيق وحدة تحكم يستخدم فئة التصحيح لتوفير معلومات حول تنفيذ البرنامج.


عند تشغيل البرنامج، يمكنك استخدام أساليب الفئة Debug لإنتاج الرسائل التي تساعدك على مراقبة تسلسل تنفيذ برنامج للكشف عن الأعطال، أو لتوفير معلومات قياس الأداء. بشكل افتراضي، تظهر الرسائل التي تنتج فئة التصحيح في نافذة الإخراج لتطوير Visual Studio المتكاملة بيئة (IDE).

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

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

يمكنك أيضا توجيه الإخراج من فئة Debug إلى وجهات مختلفة عن إطار الإخراج. فئة التصحيح قد جمع المسمى المستمعين تتضمن كائنات وحدة الإصغاء .

مراقبة تصحيح الإخراج كل كائن إصغاء وتوجيه الإخراج إلى هدف محدد.


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

تتضمن بعض أهداف النواتج الممكنة ما يلي:
  • إطار وحدة التحكم باستخدام الخاصية System.Console.Out .
  • ملف نصي (txt.) باستخدام عبارة System.IO.File.CreateText("FileName.txt") .
بعد إنشاء كائن TextWriterTraceListener ، يجب إضافة الكائن إلى مجموعة Debug.Listeners لتلقي إخراج التصحيح.

العودة إلى أعلى

إنشاء نموذج باستخدام فئة التصحيح

  1. بدء إصدار Express Visual Studio أو Visual C#.
  2. إنشاء مشروع تطبيق Visual C# وحدة تحكم جديد باسم conInfo. يتم إنشاء Class1 في Visual Studio.NET. يتم إنشاء برنامج. cs في Visual Studio 2005.
  3. إضافة مساحة الاسم التالية في أعلى في الفئة 1 أو برنامج. cs.
    using System.Diagnostics;
  4. لتهيئة المتغيرات تحتوي على معلومات حول منتج، إضافة عبارات تعريف التالية إلى الأسلوب الرئيسي :
    string sProdName = "Widget";
    int iUnitQty = 100;
    double dUnitCost = 1.03;
  5. تحديد الرسالة التي تنتج الفئة كأول معلمة الإدخال للأسلوب الإشارة . اضغط تركيبة المفاتيح CTRL + ALT + O تأكد من رؤية نافذة الإخراج.
    Debug.WriteLine("Debug Information-Product Starting ");
  6. من أجل قابلية القراءة، استخدم الأسلوب المسافة البادئة لوضع مسافة بادئة الرسائل التالية في إطار الإخراج:
    Debug.Indent();
  7. لعرض محتوى المتغيرات المحددة، استخدم الأسلوب WriteLine كما يلي:
    Debug.WriteLine("The product name is " + sProdName);
    Debug.WriteLine("The available units on hand are" + iUnitQty.ToString());
    Debug.WriteLine("The per unit cost is " + dUnitCost.ToString());
  8. يمكنك أيضا استخدام الأسلوب الإشارة لعرض مساحة الاسم واسم الفئة لكائن موجود. على سبيل المثال، التعليمات البرمجية التالية تعرض مساحة الاسم System.Xml.XmlDocument في نافذة الإخراج:
    System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
    Debug.WriteLine(oxml);
  9. لتنظيم الإنتاج، يمكنك تضمين معلمة الأسلوب الإشارة لفئة الاختيارية، الإدخال الثاني. إذا قمت بتحديد فئة، يتم تنسيق الرسالة إطار الإخراج "الفئة: الرسالة." على سبيل المثال، يعرض السطر الأول من التعليمات البرمجية التالية "حقل: اسم المنتج هو عنصر واجهة المستخدم" في نافذة الإخراج:
    Debug.WriteLine("The product name is " + sProdName,"Field");
    Debug.WriteLine("The units on hand are" + iUnitQty,"Field");
    Debug.WriteLine("The per unit cost is" + dUnitCost.ToString(),"Field");
    Debug.WriteLine("Total Cost is " + (iUnitQty * dUnitCost),"Calc");
  10. عرض نافذة الإخراج الرسائل فقط إذا كان شرط معين يتم تقييمها إلى true باستخدام أسلوب WriteLineIf الفئة Debug . هو شرط لتقييم معلمة الإدخال الأول من الأسلوب WriteLineIf . المعلمة الثانية من WriteLineIf هي الرسالة التي تظهر فقط إذا تم تقييم الشرط في المعلمة الأولى إلى true.
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
    Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
  11. استخدام الأسلوب تأكيد من الفئة Debug بحيث يعرض الإطار إخراج الرسالة فقط إذا تم تقييم شرط محدد إلى false:
    Debug.Assert(dUnitCost > 1, "Message will NOT appear");
    Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
  12. إنشاء كائنات TextWriterTraceListener لإطار وحدة التحكم (tr1) وملف نصي يدعى Output.txt (tr2) ثم قم بإضافة كل كائن إلى مجموعة وحدات إصغاء التصحيح :
    TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
    Debug.Listeners.Add(tr1);

    TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));
    Debug.Listeners.Add(tr2);
  13. من أجل قابلية القراءة، استخدم الأسلوب Unindent لإزالة المسافة البادئة للرسائل اللاحقة
    إنشاء فئة التصحيح . عند استخدام مسافة بادئة واﻷساليب Unindent معا، يمكن التمييز القارئ الإخراج كمجموعة.
    Debug.Unindent();
    Debug.WriteLine("Debug Information-Product Ending");
  14. للتأكد من أن كل كائن مصغي يتلقى الإخراج الخاص به، باستدعاء الأسلوب مسح للمخازن المؤقتة فئة التصحيح :
    Debug.Flush();
العودة إلى أعلى

استخدام فئة التتبع

يمكنك أيضا استخدام فئة التتبع لإنتاج رسائل مراقبة تنفيذ أحد التطبيقات. مشاركة الفئات التتبع وتصحيح معظم الأساليب نفس لإنتاج الإخراج، بما في ذلك ما يلي:
  • WriteLine
  • WriteLineIf
  • المسافة البادئة
  • إزالة المسافة البادئة
  • تأكيد
  • مسح
يمكنك استخدام فئات التصحيح و التتبع بشكل منفصل أو معا في نفس التطبيق. في مشروع "تكوين الحل يصحح" كل من تتبع و تصحيح الإخراج نشطين. ينشئ المشروع الإخراج من كل من هذه الفئات إلى كافة الكائنات وحدة الإصغاء . ومع ذلك، ينشئ مشروع "تكوين الحل إصدار" فقط الإخراج من فئة التتبع . يتجاهل مشروع "تكوين الحل إصدار" أي استدعاءات أسلوب فئة التصحيح .
Trace.WriteLine("Trace Information-Product Starting ");
Trace.Indent();

Trace.WriteLine("The product name is "+sProdName);
Trace.WriteLine("The product name is"+sProdName,"Field" );
Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Trace.Assert(dUnitCost > 1, "Message will NOT appear");

Trace.Unindent();
Trace.WriteLine("Trace Information-Product Ending");

Trace.Flush();

Console.ReadLine();
العودة إلى أعلى

تحقق من أنه يعمل

  1. تأكد من أن تصحيح تكوين الحل الحالي.
  2. في حالة عدم ظهور إطار "مستكشف الحلول" ، اضغط تركيبة المفاتيح CTRL + ALT + L لعرض هذه النافذة.
  3. انقر نقراً مزدوجاً فوق conInfoومن ثم انقر فوق
    خصائص.
  4. في الجزء الأيمن من صفحة خصائص conInfo، تحت
    تكوين مجلد، تأكد من أن يشير السهم إلى
    تصحيح الأخطاء.

    ملاحظة: في 2005 Visual C# و Visual C# 2005 Express Edition، انقر فوق تصحيح في الصفحة conInfo .
  5. أعلى المجلد تكوين ، في
    تكوين مربع القائمة المنسدلة، انقر فوق نشط (تصحيح) أو تصحيحومن ثم انقر فوق
    "موافق". في 2005 Visual C# و Visual C# 2005 Express Edition، انقر فوق نشط (تصحيح) أو التصحيح في مربع القائمة المنسدلة التكوين في تصحيح الصفحة ومن ثم انقر فوق حفظ القائمة ملف .
  6. اضغط على CTRL + ALT + O لعرض إطار الإخراج.
  7. اضغط المفتاح F5 لتشغيل التعليمات البرمجية. عند
    يظهر مربع الحوار فشل في التأكيد ، انقر فوق
    تجاهل.
  8. في إطار وحدة التحكم، اضغط ENTER. يجب إنهاء البرنامج، ويجب أن يعرض الإطار إخراج الإخراج مشابهة لما يلي
        Debug Information-Product Starting 
    The product name is Widget
    The available units on hand are100
    The per unit cost is 1.03
    System.Xml.XmlDocument
    Field: The product name is Widget
    Field: The units on hand are100
    Field: The per unit cost is1.03
    Calc: Total Cost is 103
    This message WILL appear
    ---- DEBUG ASSERTION FAILED ----
    ---- Assert Short Message ----
    Message will appear since dUnitcost < 1 is false
    ---- Assert Long Message ----


    at Class1.Main(String[] args) <%Path%>\class1.cs(34)

    The product name is Widget
    The available units on hand are100
    The per unit cost is 1.03
    Debug Information-Product Ending
    Trace Information-Product Starting
    The product name is Widget
    Field: The product name isWidget
    This message WILL appear
    Trace Information-Product Ending

  9. يجب عرض إطار وحدة التحكم وملف Output.txt الإخراج التالي:
    The product name is Widget
    The available units on hand are 100
    The per unit cost is 1.03
    Debug Information-Product Ending
    Trace Information-Product Starting
    The product name is Widget
    Field: The product name is Widget
    This message WILL appear
    Trace Information-Product Ending
ملاحظة: يقع الملف Output.txt في نفس الدليل ك conInfo القابل للتنفيذ (conInfo.exe). بشكل عام، هذا هو المجلد \bin المخزن المصدر المشروع. بشكل افتراضي، وهذا \My Documents\Visual Projects\conInfo\bin ستوديو C:\Documents and Settings\تسجيل دخول المستخدم. في 2005 Visual C# و Visual C# 2005 Express Edition، يوجد الملف Output.txt في المجلد التالي:
\My Documents\Visual 2005\Projects\conInfo\conInfo\bin\Debug ستوديو C:\Documents and Settings\تسجيل دخول المستخدم


العودة إلى أعلى

إتمام سرد التعليمات البرمجية

   using System;
using System.Diagnostics;

class Class1
{
[STAThread]
static void Main(string[] args)
{
string sProdName = "Widget";
int iUnitQty = 100;
double dUnitCost = 1.03;
Debug.WriteLine("Debug Information-Product Starting ");
Debug.Indent();
Debug.WriteLine("The product name is "+sProdName);
Debug.WriteLine("The available units on hand are"+iUnitQty.ToString());
Debug.WriteLine("The per unit cost is "+ dUnitCost.ToString());

System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
Debug.WriteLine(oxml);

Debug.WriteLine("The product name is "+sProdName,"Field");
Debug.WriteLine("The units on hand are"+iUnitQty,"Field");
Debug.WriteLine("The per unit cost is"+dUnitCost.ToString(),"Field");
Debug.WriteLine("Total Cost is "+(iUnitQty * dUnitCost),"Calc");

Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");

Debug.Assert(dUnitCost > 1, "Message will NOT appear");
Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");

TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(tr1);

TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));
Debug.Listeners.Add(tr2);


Debug.WriteLine("The product name is "+sProdName);
Debug.WriteLine("The available units on hand are"+iUnitQty);
Debug.WriteLine("The per unit cost is "+dUnitCost);
Debug.Unindent();
Debug.WriteLine("Debug Information-Product Ending");
Debug.Flush();

Trace.WriteLine("Trace Information-Product Starting ");
Trace.Indent();

Trace.WriteLine("The product name is "+sProdName);
Trace.WriteLine("The product name is"+sProdName,"Field" );
Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Trace.Assert(dUnitCost > 1, "Message will NOT appear");


Trace.Unindent();
Trace.WriteLine("Trace Information-Product Ending");

Trace.Flush();

Console.ReadLine();
}
}


العودة إلى أعلى

استكشاف أخطاء وإصلاحها

  • إذا كان نوع تكوين الحل هو الإصدار، يتم تجاهل الإخراج فئة التصحيح .
  • بعد إنشاء فئة TextWriterTraceListener لهدف معين، يتلقى TextWriterTraceListener الإخراج من فئات التصحيح و التتبع . يحدث هذا بغض النظر عن ما إذا كنت تستخدم أسلوب إضافة التتبع أو فئة التصحيح لإضافة TextWriterTraceListener إلى فئة المستمعين .
  • إذا قمت بإضافة كائن المستمعين لنفس الهدف في فئات التصحيح و التتبع ، كل سطر الإخراج مكرر، بغض النظر عن ما إذا كان
    ينشئ التتبع أو تصحيح الإخراج.
             TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out);
    Debug.Listeners.Add(myWriter);

    TextWriterTraceListener myCreator = new TextWriterTraceListener(System.Console.Out);
    Trace.Listeners.Add(myCreator);

العودة إلى أعلى

المراجع


لمزيد من المعلومات، راجع المواضيع التالية في وثائق مكتبة الفئات.NET Framework:العودة إلى أعلى