كيف يمكنني استرجاع / طباعة (stderr) خطأ"؟


حسنًا، بعد RTFM أعرف أن “ربط الوظيفة” يعين “خطأ (أخطاء)” عند الفشل …
1. هل يمكنني الحصول على هذه المعلومات من الكود التالي؟
(أنا لا أطلب “خطأ” محددًا، بل مجرد مؤشر – في الكود – أن الوظيفة تحدد (stderr) “خطأ”.
2. ما هي الطريقة الأكثر مباشرة لاسترداد النص الفعلي للخطأ فعليًا – بافتراض أنه “stderr”؟
أريد فقط إظهاره، ولست بحاجة إلى تسجيله أو حفظه في ملف (والذي يبدو أنه الطريقة الأكثر شيوعًا).

سي ++
/**
   *  @brief Function template for std::bind.
   *  @ingroup binders
   */
  template<typename _Func, typename... _BoundArgs>
    inline _GLIBCXX20_CONSTEXPR typename
    _Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type
    bind(_Func&& __f, _BoundArgs&&... __args)
    {
      typedef _Bind_helper<false, _Func, _BoundArgs...> __helper_type;
      return typename __helper_type::type(std::forward<_Func>(__f),
					  std::forward<_BoundArgs>(__args)...);
    }

ما حاولت:

حاولت دون جدوى بدء العملية وقراءة stderr.

الحل 1

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

الطريقة الأكثر مباشرة هي الاتصال WSAGetLastError في عالم النوافذ وأماكن أخرى يجب أن يمر errno إلى الوظيفة strerror. هنا مقال يصف هذا: كيفية الحصول على رسالة خطأ في مأخذ التوصيل[^]

تعليق ريتشارد صحيح وسؤالك غير واضح على الإطلاق.

عادة عندما يريد المرء أن يكتب ل stderr أنت تفعل شيئا مثل هذا:

سي ++
fprintf( stderr, "Error at line %d of %s\n", __LINE__, __FILE__ );

stderr، يحب stdout، يمكن إعادة توجيهها إلى ملف أيضًا.

コメント

タイトルとURLをコピーしました