가짜 오류 메시지


18

컴파일러 또는 인터프리터의 구문 오류 메시지를 인쇄하는 프로그램을 작성하십시오. 오류 메시지는 코드 관리자가 오류가 위조되었음을 알기 위해 며칠이 걸릴 수 있도록 오도해야합니다. 즉, 난독 화 (의도를 숨겨야 함)해야합니다. 또한 오류는 가능한 한 정확해야하며 코드를 올바르게 참조해야합니다.

호환되는 언어의 경우 코드 관리자가 compile program.p && ./program명령 줄에서 프로그램을 컴파일하고 실행 한다고 가정합니다. 즉, 출력이 컴파일러 또는 프로그램 자체에서 나온 것인지 구별 할 수 없습니다. 또한 코드 관리자가 구문 오류 메시지를 설정한다고 가정하십시오.

참고로 다음은 내가 만든 예입니다. https://gist.github.com/359604

DATA섹션은 오류 메시지 문자열을 인코딩하며 해시 %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)이되면 일반적인 Python 인터프리터

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

"코드가 오류를 올바르게 재생 함"이 1 미만인 경우 참가 자격이 박탈됩니다.

동점 인 경우 추가 등급을 매길 것입니다.


어 .. 나는 객관적이지 않다는 이유로 스파키의 최근 난독 화 질문닫았고 , 이제 우리는 피터의 손쥐고있는 것을 얻었습니다 . 윌리-닐리의 모든 것에 앉아 있거나 개인적인 편견을 바탕으로 선택한 것보다는 메타에 관한 또 다른 주제를 열거 나 오래된 주제를 부활시킬 것입니다. Jeff는 "객관적"이 요구 사항이라고 생각하는 것 같습니다.
dmckee


해결책은 인기 경쟁이 될 수 있습니다 . 글쎄, 객관적인 승리 기준.
Johannes Kuhn

답변:


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], not을 사용해야한다는 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틀린 경우와 구별 할 수 없습니다 .

두 가지 오류는 우연히 발생할 수 있다는 점에서 다소 "중복"입니다.


이것은 훌륭하다
Cruncher

훌륭한. 이것은 나에게 파이썬의 또 다른 이상한 것을 상기시킵니다. raise파이썬 2에서 실행 하지만, 파이썬의 기본 IDE 인 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
, 호기심이 인쇄 BF 컴파일러없이 당신을 위해, "F *** 구문 오류 :] 오프닝 전에 나타났다 토큰 [토큰 마감!"
피터 올슨

1
CG, Minitech에서 만나서 반가워요:)
Bojangles

Lol, 개정 이력이 재미있다 : P
Doorknob

1

자바

throw new Error();  

실제로 처리되지 않은 예외 (예에서와 같이)를 발생 시키거나 오류 메시지를 시뮬레이션해야하는지 알 수 없었습니다. 이 경우 작동합니다.

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

(이것이 stdio.h#include 라고 가정합니다 )


죄송합니다. 난독 처리 부분에 대한 게시물을 자세히 읽으십시오. 나는 그것에 난독 화를 추가 할 것이지만 현재는 어떤 ide에도 접근 할 수 없습니다. 내가 하나를 얻을 때 (아는 사람도 다른 랭에서 어쩌면;) :(], 난의 definetly 헷갈 리도록를 게시 할 예정입니다
네이트 Koppenhaver

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.");
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.