إدارة الخطأ

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

سجلات وحدة التحكم

عندما يعمل التطبيق بشكل غير متوقع أو مفهوم، فمن الضروري الرجوع إلى وحدة تحكم لمراقبة ما يفعله التطبيق داخليًا. يحتوي AppStudio على وحدة تحكم مدمجة (راجع موضوع التقاط مخرجات وحدة التحكم لمزيد من المعلومات)، ويعرض Qt Creator رسائل وحدة التحكم عند تشغيل التطبيق بداخله. يمكن توفير معلومات إضافية لوحدة التحكم من خلال خط كود، إما لتوفير خاصية قد تكون مفيدة كمركز توقيع للوظيفة بناتج معقد قد لا يعمل بشكل صحيح.

يرسم نموذج الكود التالي خطًا في سجل وحدة التحكم يعرض filepath الجديد عند تغييره:

        TextField {
            Layout.fillWidth: true
            text: fileFolder.path
            onEditingFinished: {
                fileFolder.path = text.trim();
                console.log("New filepath:", fileFolder.path);
            }
        }

لمزيد من الدعم الخاص بوحدة التحكم، في كل من نموذج الناتج الحي وملفات السجل، يوفر AppStudio AppFramework مكون تسجيل بسلسلة من الوظائف بهدف المساعدة في سجلات وحدة التحكم وتكوينها.

لبدء سجل وحدة تحكم، قم بتعيين خاصية enabled في مكون التسجيل إلى true. ويمكن تعيين ذلك في الخلفية لتسجيل الجلسة بالكامل أو تعيين بواسطة مُبدّل أو زر لبدء التسجيل عند الطلب فقط. عند بدء التسجيل، فإنه يشير إلى خاصية outputLocation لتحديد موقع ونموذج الإنتاج. قد تكون هذه الوجهة إما مسار ملف، وفي هذه الحالة ينشئ التطبيق ويُنتج ملف سجل، أو عنوان URL الخاص بوحدة تحكم syslog، وفي هذه الحالة سيقوم التطبيق بالإنتاج هنا مباشرةً. يمكن تكوين تنسيق رسائل السجل من خلال خاصية messagePattern.

تستخدم خاصية messagePatternسلسلة من العناصر النائبة لبناء المعلومات. لعرض المعلومات المرغوب فيها في رسائل وحدة التحكم، قم بتضمين العناصر النائبة التالية:

عنصر نائبالوصف

%{appname}

QCoreApplication::applicationName>()

%{category}

فئة التسجيل

%{file}

مسار ملف المصدر

%{function}

دالة

%{line}

خط في ملف المصدر

%{message}

الرسالة الفعلية

%{pid}

QCoreApplication::applicationPid()

%{threadid}

معرف نظام-نطاق مؤشر التطابق (إن أمكن الحصول عليه)

%{qthreadptr}

مؤشر إلى QThread الحالي (نتيجة QThread::currentThread()

%{type}

"تصحيح" أو "تحذير" أو "خطير" أو "فادح"

%{time process}

وقت الرسالة، بالثوان، منذ بدء العملية

%{time boot}

وقت الرسالة، بالثوان، منذ تشغيل النظام إذا أمكن تحديده

%{time [format]}

توقيت النظام عند حدوث الرسالة، تنسيقها بواسطة اختياز التنسيق إلى QDateTime::toString()

إضافة رسائل خطأ

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

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

MessageDialog {
    id: messageDialog
    title: "Network error"
    text: "Error code: "  + networkRequest.errorCode + "\n" + networkRequest.errorText
}
NetworkRequest {
    id: networkRequest
    url: "http://appstudio.arcgis.com/images/index/introview.jpg2"
    responseType: "json"
    onError: {
        messageDialog.open();
    }
}
Button {
    id: sendBtn
    text: "Send Request"
    onClicked: {
        networkRequest.send();
    }
}