नकली त्रुटि संदेश


18

एक प्रोग्राम लिखें जो संकलक या दुभाषिया के वाक्यविन्यास त्रुटि संदेश को प्रिंट करता है। त्रुटि संदेश भ्रामक होना चाहिए ताकि कोड अनुरक्षक को यह पता लगाने में दिन लगें कि त्रुटि फ़ेक थी, इसका मतलब है कि, आपको obfuscate करना चाहिए (और अपना इरादा छुपाना चाहिए)। साथ ही, त्रुटि यथासंभव सटीक होनी चाहिए, और कोड का सही संदर्भ होना चाहिए।

compile program.p && ./programसंकलित भाषाओं के लिए, मान लें कि आपका कोड अनुरक्षक प्रोग्राम को संकलित करने और चलाने के लिए कमांड लाइन पर करेगा , अर्थात, यदि कंपाइलर या प्रोग्राम से आउटपुट स्वयं आता है तो वह अंतर नहीं कर सकता है। इसके अलावा, मान लें कि आपका कोड अनुरक्षक सिंटैक्स त्रुटि संदेशों को चालू करेगा।

संदर्भ के लिए, यहां एक उदाहरण मैंने बनाया है: https://gist.github.com/359604

DATAअनुभाग त्रुटि संदेश की स्ट्रिंग encodes, और हैश %abcdefडिकोड टेबल है। बैकस्लैश के लिए त्रुटि मुद्रित संदर्भ, जो एक कोड अनुरक्षक बनाता है बैकस्लैश को गिनने की कोशिश करेगा।

प्रविष्टियों को वर्गीकृत किया जाएगा:

  • कोड का भ्रामक स्पष्ट इरादा है /6
  • कोड त्रुटि को सही ढंग से पुन: पेश करता है /16 (आपकी बात 16 से शुरू होती है, और प्रत्येक अशुद्धियों के लिए संबंधित कारकों से विभाजित होती है)
    • सही पूंजीकरण: 4
    • सही लाइन नंबर और कॉलम नंबर: 4
    • सही गलत: प्रत्येक गलत शब्दों के लिए 2
  • संदर्भित लाइन कोड संख्या को गुमराह करता है /3

उदाहरण के लिए,

./pythontest1.py: line 7: syntax error near token `('
./pythontest1.py: line 7: `   x=input("Enter a number:") #Number input'

"टोकन" से पहले "अप्रत्याशित" लापता होने के लिए शुद्धता पर 8 (16/2) मिलता है, एक सामान्य अजगर दुभाषिया प्रदर्शित करता है

./pythontest1.py: line 7: syntax error near unexpected token `('
./pythontest1.py: line 7: `   x=input("Enter a number:") #Number input'

यदि आपका "कोड त्रुटि को सही ढंग से पुन: पेश करता है" बिंदु 1 से कम है, तो आपका प्रवेश अयोग्य है।

एक टाई के मामले में, मैं अतिरिक्त ग्रेडिंग कारक लगाऊंगा।


उह ... मैंने स्पार्की के हालिया ऑब्सेफिकेशन सवाल को वस्तुनिष्ठ नहीं होने के कारण बंद कर दिया , और अब हमें पीटर की नीच बात मिल गई है और यह (जिसे मैं स्वीकार करता हूं निष्पक्षता प्राप्त करने का एक शानदार प्रयास करता है)। बल्कि सब कुछ विली-नीली पर बैठकर या अपने व्यक्तिगत पूर्वाग्रह के आधार पर चुने जाने के बाद, मैं मेटा पर एक और विषय खोलने जा रहा हूं, या शायद एक पुराने को फिर से जीवित कर दूंगा। विदित हो कि जेफ को लगता है कि "उद्देश्य" एक आवश्यकता है।
dmckee


एक समाधान लोकप्रियता-प्रतियोगिता हो सकता है । खैर, एक उद्देश्य जीतने के मापदंड।
जोहान्स कुह्न

जवाबों:


35

अजगर

import sys,traceback
try:
  f=open(sys.argv[0])
  print eval(f.readline())
except Exception, e:
  traceback.print_exc(0)

यह एक प्रोग्राम है जिसे कमांड लाइन पर फ़ाइल नाम लेना चाहिए, इसमें पहली लाइन का मूल्यांकन करना चाहिए और परिणाम प्रिंट करना चाहिए। इसके 2 बग हैं। प्रमुख बग यह है कि इसका उपयोग किया जाना चाहिए sys.argv[1], नहीं sys.argv[0], इसलिए यह कार्यक्रम का मूल्यांकन करना समाप्त करता है, न कि पहली दलील द्वारा नामित फ़ाइल की सामग्री। दूसरा बग यह है कि इसे बनाने का तर्क print_excस्टैक पर केवल सबसे गहरे फ्रेम को प्रिंट करता है, इस तथ्य को छिपाता है कि त्रुटि अंदर हुई थी eval। परिणामस्वरूप, आपको एक त्रुटि मिलती है:

$ python fake_error.py twelve 
Traceback (most recent call last):
  File "<string>", line 1
     import sys,traceback
          ^
 SyntaxError: invalid syntax

ऐसा लगता है कि कार्यक्रम की पहली पंक्ति में एक वाक्यविन्यास त्रुटि है। यह फ़ाइल के रूप में बिल्कुल सही नहीं है <string>, नहीं fake_error.py, लेकिन अन्यथा यह उस मामले से अप्रभेद्य है जहां, उदाहरण के लिए, आप importगलत वर्तनी करते हैं।

दोनों त्रुटियां कुछ हद तक "कम" हैं कि वे आकस्मिक हो सकते हैं।


यह शानदार है
क्रंचर

प्रतिभाशाली। यह मुझे पायथन की एक और विषमता की याद दिलाता है। raiseपायथन 2 में चल रहा है, लेकिन IDLE में, अजगर की डिफ़ॉल्ट आईडीई, कतारों के लिए आंतरिक त्रुटि मुद्रण अस्पष्टता का कारण बनता है। Traceback (most recent call last): ** IDLE Internal Exception: File "2.7/lib/python2.7/idlelib/run.py", line 325, in runcode exec code in self.locals File "2.7/lib/python2.7/idlelib/run.py", line 111, in main seq, request = rpc.request_queue.get(block=True, timeout=0.05) File "2.7/lib/python2.7/Queue.py", line 176, in get raise Empty
मैट

10

मुझे एक व्यावहारिक मजाक याद दिलाता है।

$ ls -l
$ cat readme.txt
cat: readme.txt: No such file or directory
$ echo 'cat: readme.txt: No such file or directory' >readme.txt
$ ls -l
total 8
-rw-r--r--  1 florian  staff  43 Mar 16 09:52 readme.txt
$ cat readme.txt
cat: readme.txt: No such file or directory
$ 

9

BrainF ***

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>++++++++++[<+++++++++++<++++++++++<++++++++++<+++++++++++<+++++++++++<+++<+++++++++<+++<++++++++++<+++++++++++<++++++++++<+++++++++++<++++++++++<+++++++++++<+++++++++++<+++<+++++++++++<+++++++++<+++<++++++++++<+++++++++++<+++++++++++<++++++++++<++++++++++<+++++++++<+++<++++++++++<++++++++++<+++++++++++<+++++++++<++++++++++<+++++++++++<+++++++++++<+++++++++<+++<+++++++++++<++++++++++<++++++++++<+++++++++++<+++++++++++<+++<+++++++++<+++<++++++++++<+++++++++++<++++++++++<+++++++++++<+++++++++++<++++++++++<+++++++++<+++<+++++<+++++++++++<+++++++++++<+++++++++++<+++++++++++<++++++++++<+++<++++++++++++<+++++++++<+++++++++++<+++++++++++<++++++++++++<++++++++<+++<+++<++++<++++<++++<+++++++>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.>++.>++.>++.>+++.>++.>+++.>+.>.>++++++.>+++++++.>.>++.>+.>++++.>++++.>+.>++++.>++++++++.>++.>+++++++++.>++++++++.>+.>+++++.>+++++.>.>+++.>++.>+++.>++.>++++++.>+.>+++++++.>+.>.>++.>+++++++.>++.>++.>+.>+++++++.>++++.>+.>.>++.>++++++++.>+.>++.>+.>++++.>+.>++.>+++++++.>.>++.>+.>++.>+.>.>+++++.>.>+++.>++.>+.>++.>++++++.>+.>+++++++.>+.>.>

मैं पहले इस्तेमाल किए गए विशेष संकलक को नहीं ढूँढ सकता, लेकिन मैं आपको विश्वास दिलाता हूं कि यह सटीक त्रुटि संदेश है।


5
बीएफ कंपाइलर के बिना आप में से जो उत्सुक हैं, के लिए यह प्रिंट करता है, "एफ ***! सिंटैक्स त्रुटि: समापन] एक खोलने से पहले टोकन दिखाई दिया [टोकन"
पीटर ओल्सन

1
आपको CG, मिनिटेक:)
Bojangles

Lol, पुनरीक्षण इतिहास मनोरंजक है: पी
दरवाज़े

1

जावा

throw new Error();  

मुझे नहीं पता था कि क्या आप वास्तव में एक अखंडित अपवाद (जैसे कि उदाहरण में) फेंक रहे हैं, या एक त्रुटि संदेश का अनुकरण कर रहे हैं। अगर ऐसा है, तो यह काम करना चाहिए:

सी

printf("FATAL ERROR #0xBAD\nProgram execution stopped\n\nIn line 123, character 321, of file 'buggy.c'");

(यह stdio.hमाना जाता है कि यह #included है)


उफ़, बस ओफ़्फ़क्यूशन भाग के बारे में अपनी पोस्ट-इन-डेप्थ पढ़ें। मैं इसे करने के लिए एक obfuscator जोड़ना होगा, लेकिन मैं वर्तमान में किसी भी आईडी के लिए उपयोग नहीं है। [:(] जब मैं एक हो जाता है, तो मैं निश्चित रूप से एक
मोटापे से ग्रस्त

0

गेम मेकर लैंग्वेज

show_error("Error: Undefined variable a##Line 1, character 4, of event Create in obj_controller",0)

0

कार्रवाई 3

trace("TypeError: Error #1009: Cannot access a property or method of a null object reference.");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.