Bagaimana cara saya mengatasi masalah Emacs?


21

Dalam situasi di mana Emacs tidak berperilaku seperti yang saya inginkan, apa yang dapat saya lakukan untuk memecahkan masalah? Langkah apa yang dapat saya ambil untuk menemukan dan memperbaiki masalah sendiri?

Atau, jika gagal, bagaimana saya bisa mengumpulkan informasi yang berguna sehingga orang-orang di sini (atau di milis atau forum lain) dapat membantu saya dengan masalah saya?

Emacs saya mencakup banyak paket, koleksi salinan snipets & paste (atau terbunuh & ditarik) dari seluruh internet, dan elisp kustom saya sendiri, beberapa di antaranya saya tidak ingat menulis, atau tidak lagi mengerti. Adakah cara untuk memahami semua komplikasi ini?


Tidak yakin apakah ini tempat terbaik untuk ini, tetapi ada banyak pertanyaan yang mendapatkan jawaban / komentar yang diminta emacs -Qsebagai langkah pertama. Saya menulis ini sebagai sesuatu untuk menghubungkan pertanyaan-pertanyaan itu sebagai bantuan umum untuk pengguna baru.
Tyler

Yup, ini adalah tempat terbaik untuk ini. Sebenarnya, pertanyaan seperti itu disarankan (hampir) 2 tahun yang lalu: meta.emacs.stackexchange.com/q/198/184 Terima kasih!
T. Verron

Jawaban:


28

Langkah 1: berlari emacs -Q

Hal pertama yang perlu Anda lakukan adalah menjalankan emacs tanpa penyesuaian apa pun. Jika Anda dapat mereproduksi masalah di vanilla Emacs, itu mungkin sebenarnya adalah bug di Emacs sendiri. Itu jarang, tapi kami mengesampingkannya sebagai langkah pertama.

Jika Anda memulai Emacs dari baris perintah dengan -Qbendera, yaitu emacs -Q, Anda akan mendapatkan emacs telanjang atau 'vanilla', tanpa ada kustomisasi lokal Anda yang dimuat. Apakah masalah Anda masih terjadi? Jika demikian, lewati untuk "Menyediakan Resep Bug".

Langkah 1b: bagaimana jika masalahnya ada pada paket?

Jika masalah Anda khusus untuk paket tertentu, maka jelas Anda tidak dapat mereproduksinya tanpa memuat paket itu. Tetapi Anda hanya ingin memuat paket yang bersangkutan, tidak semua konfigurasi Anda. Untuk melakukannya, jalankan emacs -Qlagi, dan siapkan skrip pendek seperti berikut:

(require 'package)
(setq package-load-list
      '((package1 t)))
(package-initialize)

Ganti package1dengan nama paket yang ingin Anda muat. Jika Anda perlu memuat beberapa paket, ubah skrip yang sesuai:

(require 'package)
(setq package-load-list
      '((package1 t)
        (package2 t)
        (package3 t)))
(package-initialize)

Untuk memuat kode ini, Anda dapat menempelkannya ke *scratch*buffer, dan memanggil M-x eval-buffer. (atau buffer apa pun, asalkan tidak memiliki kode lain di dalamnya!).

Pada titik ini, Anda telah memuat paket, dan hanya paket yang sedang Anda uji. Jika Anda dapat mereproduksi masalah sekarang, lewati untuk "Menyediakan Resep Bug".

Langkah 2: Menemukan Bug di blog Anda .emacs

Anda sekarang telah mengkonfirmasi bahwa masalahnya berasal dari sesuatu di konfigurasi Anda ("panggilan berasal dari dalam rumah!"). Konfigurasi Anda mungkin ribuan baris, dan mungkin memuat banyak file berbeda. Untuk menemukan masalah, Anda akan melakukan pencarian biner, mengomentari setengah kode sekaligus untuk mempersempit. 1

  1. Buka emacs reguler Anda emacs,, tanpa -Qopsi.
  2. Buka file konfigurasi Anda (biasanya ~/.emacsatau .emacs.d/init.el, jika Anda tidak dapat menemukannya, cobalah C-h v user-init-file)
  3. Pilih bagian pertama file: C-spaceuntuk menetapkan tanda, gulir ke bawah setengah jalan untuk memperluas wilayah
  4. Komentari wilayah yang dipilih: M-;dan simpan file
  5. Buka yang baru emacs ( emacs pengujian Anda ), biarkan emacs pertama berjalan. test emacs akan membaca versi yang dikurangi dari konfigurasi Anda.
  6. Cobalah untuk mereproduksi masalah dalam uji emacs
  7. Jika Anda tidak dapat mereproduksi itu, dekat emacs tes , dan dalam emacs asli Anda undokomentar dengan C-/, dan komentar setengah dari kode yang tersisa. Buka emacs pengujian baru dan coba lagi.
  8. Jika Anda dapat mereproduksi masalah, komentar setengah dari kode yang tersisa dan lihat apakah masalahnya masih ada.
  9. Ulangi proses ini sampai Anda menemukan sedikit dari konfigurasi Anda yang diperlukan untuk mereproduksi masalah.

Jika masalah Anda dengan paket tertentu, Anda harus meninggalkan kode yang memuat paket itu tanpa komentar, tentu saja.

Jika file konfigurasi Anda memuat file-file lain, Anda mungkin akhirnya memperluas pencarian Anda ke file-file itu juga.

Pada titik ini, Anda mungkin telah menemukan bahwa masalahnya disebabkan hanya satu atau dua baris kode. Anda bahkan dapat memperbaikinya sendiri. Jika demikian, selamat, Anda telah mempelajari sesuatu! Jika tidak, lanjutkan ke langkah ketiga.

Langkah 3: Menyediakan Resep Bug

Pada titik ini, Anda harus dapat memberikan resep bug terperinci untuk dikirim di sini. Ini harus mencakup:

  • Versi Emacs Anda (Anda bisa mendapatkannya dari Emacs bersama M-x emacs-version
  • Sistem operasi Anda (distribusi Windows #, Mac, Linux)
  • Versi paket yang Anda perjuangkan, jika ada
  • Langkah-langkah spesifik yang diperlukan untuk menunjukkan masalah, termasuk apa yang Anda harapkan akan terjadi , dan apa yang sebenarnya terjadi .

Misalnya, saya dapat memposting pertanyaan seperti ini:

Saya mengalami masalah dengan mode super. Ketika saya menggunakan M-x sm-compile-code, itu membuat penarikan dari akun PayPal saya.

Langkah-langkah untuk mereproduksi:

Memuat mode super:

(require 'package)
(setq package-load-list
      '((super-mode t)))
(package-initialize)
  • buka file baru dengan C-x C-f my-code
  • masukkan satu baris kode:
10 goto 10
  • panggilan M-x sm-compile-code

Saya berharap ini memanggil super-kompiler dan mengkompilasi program saya. Sebagai gantinya, saya melihat pesan di minibuffer "$ 100 ditransfer dari paypal ke penulis super-mode"

GNU Emacs 25.1.50.3
Debian Linux
versi Super-mode 3.1415


1 Paket Bug Hunter dapat membantu Anda dengan ini, (semi-) secara otomatis membagi dua file init Anda.


Mungkin Anda bisa menyebut The Bug Hunter .
Omar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.