Pesan kesalahan palsu

18

Tulis program yang mencetak pesan kesalahan sintaksis dari kompiler atau penerjemah. Pesan kesalahan harus menyesatkan sehingga pengelola kode akan membutuhkan waktu berhari-hari untuk mengetahui bahwa kesalahan itu dipalsukan, itu berarti, Anda harus mengaburkan (dan menyembunyikan niat Anda). Juga, kesalahan harus setepat mungkin, dan harus merujuk ke kode dengan benar.

Untuk bahasa yang dipatuhi, anggap pemelihara kode Anda akan melakukan compile program.p && ./programpada baris perintah untuk mengkompilasi DAN menjalankan program, itu berarti, ia tidak dapat membedakan jika output berasal dari kompiler atau program itu sendiri. Juga, anggap pengelola kode Anda akan mengaktifkan pesan kesalahan sintaksis.

Untuk referensi, berikut adalah contoh yang saya buat: https://gist.github.com/359604

The DATABagian mengkodekan string pesan kesalahan, dan hash %abcdefadalah tabel decode. Kesalahan mencetak referensi ke garis miring terbalik, yang membuat pemelihara kode akan mencoba menghitung garis miring terbalik.

Entri akan dinilai berdasarkan:

  • Kode memiliki niat yang tampak jelas /6
  • Kode mereproduksi kesalahan dengan benar /16 (poin Anda dimulai dengan 16, dan dibagi dengan faktor yang sesuai untuk setiap ketidakakuratan)
    • Kapitalisasi yang benar: 4
    • Nomor baris dan nomor kolom yang benar: 4
    • Kata yang benar: 2 untuk setiap kata yang salah
  • Nomor baris yang dirujuk menyesatkan pengelola kode /3

Sebagai contoh,

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

mendapat 8 (16/2) pada kebenaran untuk kehilangan "tak terduga" sebelum "token", tampilan juru bahasa Python normal

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

Jika titik "kode Anda mereproduksi kesalahan dengan benar" di bawah 1, entri Anda didiskualifikasi.

Dalam kasus dasi, saya akan memasang faktor penilaian tambahan.

Ming-Tang
sumber
Uh ... Saya menutup pertanyaan kusut Sparky baru-baru ini karena tidak objektif, dan sekarang kita punya masalah Peter yang licik dan ini (yang saya akui membuat upaya yang gagah berani untuk mendapatkan objektivitas). Daripada hanya duduk di atas segalanya mau tak mau atau memilih berdasarkan prasangka pribadi saya, saya akan membuka topik lain pada meta, atau mungkin membangkitkan yang lama. Sadarilah bahwa Jeff tampaknya berpikir bahwa "obyektif" adalah syarat.
dmckee
Sebuah solusi bisa menjadi kontes popularitas . Nah, kriteria kemenangan yang objektif.
Johannes Kuhn

Jawaban:

35

Python

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

Ini adalah program yang harus mengambil nama file pada baris perintah, mengevaluasi baris pertama di dalamnya, dan mencetak hasilnya. Ini memiliki 2 bug. Bug utama adalah bahwa ia harus digunakan sys.argv[1], bukan sys.argv[0], sehingga akhirnya mengevaluasi program itu sendiri, bukan isi file yang disebutkan oleh argumen pertama. Bug kedua adalah bahwa argumen untuk print_excmembuatnya hanya mencetak frame terdalam pada stack, menyembunyikan fakta bahwa kesalahan terjadi di dalam eval. Akibatnya, Anda mendapatkan kesalahan seperti ini:

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

Ini terlihat sangat mirip dengan baris pertama program yang memiliki kesalahan sintaksis. Ini tidak sepenuhnya benar karena file tersebut <string>, tidak fake_error.py, tetapi selain itu tidak dapat dibedakan dari kasus di mana, misalnya, Anda importsalah mengeja .

Kedua kesalahan tersebut agak "curang" karena bisa jadi tidak disengaja.

Keith Randall
sumber
Ini brilian
Cruncher
Cemerlang. Ini mengingatkan saya pada keanehan lain dari Python. Berjalan raisedi Python 2, tetapi di IDLE, IDE default python, menyebabkan kesalahan pencetakan internal omong kosong tentang antrian. 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
The Matt
10

Mengingatkan saya pada lelucon praktis.

$ 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
$ 
Florian F
sumber
9

BrainF ***

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

Saya tidak dapat menemukan kompiler tertentu yang saya gunakan sebelumnya, tetapi saya meyakinkan Anda bahwa itu adalah pesan kesalahan yang tepat.

Ry-
sumber
5
Bagi Anda tanpa penyusun BF yang penasaran, ini mencetak, "F ***! Sintaks kesalahan: penutupan] token muncul sebelum pembukaan [token"
Peter Olson
1
Senang bertemu Anda di CG, Minitech:)
Bojangles
Lol, sejarah revisi lucu: P
Doorknob
1

Jawa

throw new Error();  

Saya tidak tahu apakah yang Anda maksud sebenarnya adalah melempar pengecualian yang tidak ditangani (seperti dalam contoh itu), atau mensimulasikan pesan kesalahan. Jika itu masalahnya, ini akan berhasil:

C

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

(ini mengasumsikan bahwa stdio.h#included)

Nate Koppenhaver
sumber
Ups, baca saja pos Anda secara mendalam tentang bagian kebingungan. saya akan menambahkan obfuscator untuk itu, tetapi saya saat ini tidak memiliki akses ke id. [:(] ketika saya mendapatkan satu, saya akan pasti posting versi dikaburkan (siapa tahu, mungkin bahkan lang lain;)
Nate Koppenhaver
0

Bahasa Game Maker

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

ACTIONSCRIPT 3

trace("TypeError: Error #1009: Cannot access a property or method of a null object reference.");
wuiyang
sumber