एक बिना क्रिया C++ अपवाद मैं प्रिंट करना चाहते हैं की स्थिति में:क्या मैं विंडोज एसईएच अपवाद से सी ++ अपवाद डीकोड कर सकता हूं? (? और यदि हां, तो कैसे)
- C++ अपवाद
- एक स्टैक ट्रेस का संदेश (
what()
)।
आदेश स्टैक ट्रेस पाने के लिए, मैं संयोजन में SetUnhandledExceptionFilter
उपयोग कर रहा हूँ StackWalker पुस्तकालय के साथ:
struct FooStackWalker : StackWalker
{
virtual void OnCallstackEntry(CallstackEntryType, CallstackEntry &entry) override
{
std::cerr << entry.lineFileName << " (" << entry.lineNumber << "): " << entry.undFullName << std::endl;
}
};
LONG WINAPI UnhandledExceptionHandler(LPEXCEPTION_POINTERS pointers)
{
FooStackWalker walker;
walker.ShowCallstack(::GetCurrentThread(), pointers->ContextRecord);
::TerminateProcess(::GetCurrentProcess(), 1);
}
int main()
{
::SetUnhandledExceptionFilter(UnhandledExceptionHandler);
}
मैं स्टैक ट्रेस मिल गया है ठीक मुद्रित करने के लिए, लेकिन अब हो रही what
है मुश्किल।
क्या कोई तरीका है कि मैं एसईएच अपवाद को सी ++ अपवाद के रूप में डीकोड कर सकता हूं ताकि इस सदस्य फ़ंक्शन को समाप्त करने से पहले कॉल किया जा सके?
आपको 3 अपवाद जानकारी शब्द मिलेंगे। दूसरा अपवाद वस्तु के लिए एक सूचक है। आपको इसकी व्याख्या करने की कोई उम्मीद नहीं है, सी ++ में प्रतिबिंब जैसी कोई चीज़ नहीं है। * पकड़ * कीवर्ड द्वारा उत्सर्जित अपवाद फ़िल्टर महत्वपूर्ण हैं। –
@ हंस: अगर कोई मानता है कि जो चीज फेंक दी गई है वह हमेशा 'std :: अपवाद' (जो कई कोडबेस के लिए सच है) से निकली है, तो इसका व्याख्या नहीं किया जा सकता है? एक बार आपके पास 'std :: अपवाद' हो जाने पर आप विशिष्ट अपवाद प्रकारों के लिए 'dynamic_cast' डाउन कर सकते हैं यदि आवश्यक हो ... –
* क्या * अपवाद को कास्ट करें? यही कुंजी है। आपको * क्या * मिल सकता है। –