8

मैं Printexc.get_backtrace साथ एक स्टैकट्रेस पाने के लिए कोशिश कर रहा हूँ, लेकिन मैं एक त्रुटि हो रही है:ओसीएमएल में स्टैक निशान मुद्रित करने के लिए कब -g का उपयोग किया जाना चाहिए?

(Program not linked with -g, cannot print stack backtrace)

मैं इस तरह के संकलन कर रहा हूँ:

ocamlfind ocamlc -g -o foo ... $(FOO_OBJS)

FOO_OBJS साथ संकलित किए जाते हैं बस: ocamlc -c $OBJ

क्या गलत है? क्या प्रत्येक .cmo-g के साथ संकलित किया जाना चाहिए?

यदि -g के बिना संकलित किसी ऑब्जेक्ट में अपवाद होता है तो क्या मुझे आंशिक स्टैकट्रैक मिलेगा, या कोई स्टैकट्रैक नहीं होगा?

उत्तर

9

What's wrong? Should every .cmo be compiled with -g?

हाँ, आप संकलन और जोड़ने के लिए -g विकल्प को जोड़ना होगा। इस विकल्प के साथ प्रोग्राम के माध्यम से कदम उठाने के लिए आप ocamldebug का भी उपयोग कर सकते हैं। इसके अलावा पर्यावरण चर, OCAMLRUNPARAMb पर सेट किया जाना चाहिए।

If exception occurs in an object compiled without -g will I get a partial stacktrace, or no stacktrace at all?

आप शर्त लगाते हैं! मुझे कुछ बार याद है कि मैं -g विकल्प भूल गया था और बैक-ट्रेस मानक पुस्तकालय का था।

+4

जिस तरह से सभी पुस्तकालयों (सीएमए और सेमीएक्सए) को संकलित किया जाना चाहिए, अन्यथा गरीब उपयोगकर्ता को अपूर्ण स्टैक बैकट्रैक मिलते हैं। –

+0

आप आंशिक बैकट्रैक प्राप्त करने के लिए भाग्यशाली हैं, कभी-कभी मॉड्यूल को बिना और बिना मिश्रित बनाता है - बैकट्रैस पूरी तरह से गलत बनाता है - पीआर # 5074 – ygrek

+1

देखें एक ओसीएएमएलआरयूएनएआरएआरएएम = बी 'पर्यावरण परिवर्तक जिसे आप सेट कर सकते हैं, यह कैसे संबंधित है? – Ptival

संबंधित मुद्दे