FiveM SCRIPT ERROR nasıl okunur: dosya, satır ve stack trace

FiveM SCRIPT ERROR okumayı öğrenin: kaynak ve dosya yolu, satır numarası, stack trace, F8 versus sunucu konsolu ve nedeni bulmak için print nasıl eklenir.

Konsolda tipik hata:

text
SCRIPT ERROR: @my_script/server/main.lua:42: attempt to index a nil value (local 'xPlayer')
> handler (@my_script/server/main.lua:42)
> ref (citizen:/scripting/lua/scheduler.lua:...)

Gürültü gibi görünüyor, ama her bölüm bir anlamı vardır ve genellikle tam olarak nereye bakacağınızı söyler. Bu kılavuz onu nasıl okuyacağınızı, nerede bulacağınızı ve yeterli olmadığında ne yapacağınızı gösterir.

İlk satır: ne, nerede ve neden

text
SCRIPT ERROR: @my_script/server/main.lua:42: attempt to index a nil value (local 'xPlayer')
  • SCRIPT ERROR: Lua betik hatasını işaretler. Betik bundan sonra çalışmaya devam eder, ancak başarısız olan kod o satırda durur.
  • @my_script/server/main.lua kaynak adı (my_script) ve kaynak klasörün içindeki dosya yolu.
  • :42 dosyada satır numarası.
  • Geri kalan ileti: attempt to index a nil value (local 'xPlayer'). Lua bunu şöyle okur: 42. satırda xPlayer'ın içinde bir şeyi kullanmaya çalıştınız, ancak xPlayer nil'dir.

Dosyayı açın, o satıra gidin ve satırın kullandığı değişkenlere bakın. Çoğu durumda cevap zaten orada. Yaygın mesajların kendi kılavuzları vardır: attempt to call a nil value ve attempt to compare nil.

Stack trace: kod oraya nasıl ulaştı

> ile başlayan satırlar stack trace'i. Çalışan işlevleri listeler, başarısız olandan başında onu başlatana kadar:

text
> handler (@my_script/server/main.lua:42)
> ref (citizen:/scripting/lua/scheduler.lua:...)

Hatadan sonraki ilk satır hatanın aynı yeridir. Aşağıdaki satırlar o işlevi kimin çağırdığını gösterir. Hata bir kütüphane veya başka bir kaynağın içinde ise, listenin daha aşağısında kendi betiğinizden bir satır çoğu zaman gerçek nedenidir, çünkü betiğiniz ona yanlış bir değer geçti.

citizen:/scripting/lua/... (örneğin citizen:/scripting/lua/scheduler.lua) ile başlayan satırlar FiveM'nin kendisine aittir. Bunlar etkinliklerinizi ve iş parçacıklarınızı çalıştıran makinelemenin parçasıdır. Onları göz ardı edebilirsiniz: hata orada asla düzeltilmez ve sadece bir iş parçacığı veya olayın çalıştığını gösterirler.

İstemci veya sunucu: nereye bakılacak

Betik hatası, kodun çalıştığı tarafta görüntülenir:

  • İstemci betikleri (client_scripts, client klasöründe dosyalar): oyunda F8 tuşuna basarak istemci konsolunu açın. Hiçbir şey görmüyorsanız, hatalar hızlı bir şekilde kayabilir diye yukarı kaydırın.
  • Sunucu betikleri (server_scripts, server klasöründe dosyalar): sunucu konsolunu okuyun. txAdmin'de, bu Live Console sayfası. Terminal'den başlatılan sunucuda bu terminal penceresi.
  • Paylaşılan betikler her iki tarafta da çalışır, bu nedenle hata her iki yerde de görünebilir.

İpucu: bir menü veya eylem hiçbir şey yapmaz ve F8 boş ise, sunucu konsolunu kontrol edin. Başarısız olan kod sunucu tarafında olabilir.

Hangi satıra bakılacak

  1. İleti ilk okunus: ne tür sorun olduğunu söyler (nil, yanlış tür, eksik dışa aktarım).
  2. İlk satırdan dosya ve satırı açın. Üzerindeki her değişkeni kontrol edin.
  3. Dosya bir kütüphaneye aitse (ox_lib, çerçeve), stack trace sayfayı tamir ettiğiniz betiğin ilk satırına kadar aşağı gidin.
  4. Hatanın bir kez veya sürekli görünüp görünmediğini kontrol edin. Döngüdeki sabit hata konsolu seli. Önce onu düzeltin, çünkü diğer mesajları gizler.

No such export veya could not find dependency metni ile hatalar farklıdır. Bunlar kod satırları hakkında değil, kaynaklar hakkında. Bkz. could not find dependency.

Satır yeterli olmadığında: print ekleyin

Satır birkaç değişken kullanırsa ve hangisinin nil olduğunu bilmezseniz, hemen önce onları yazdırın:

lua
print('xPlayer:', xPlayer)
print('source:', source, type(source))
print('data:', json.encode(data))

Kodu tekrar çalıştırın ve konsolu okuyun. Yararlı print'ler için bazı ipuçları:

  • Tür'ü ve değeri yazdırın: type(value) nil, number, string, table veya function gösterir.
  • Bir tabloyu içinde görmek için json.encode(table) kullanın. Düz bir print(table) sadece bir bellek adresini gösterir.
  • Meşgul bir konsolda satırı bulabilmek için önüne kısa bir etiket koyun.
  • Hiç bir işlevde başında yazdırın, her şeyden önce çalışıp çalışmadığını doğrulamak için.

Sorun düzeltildiğinde print'leri kaldırın, çünkü meşgul döngülerde performans maliyeti vardır.

Hatanın görülmediği yerler

  • Escrow betikleri kodlarını gizlerler. Hata size dosya adı verir, ama dosya şifreli ve satırı okuyamazsınız. Tam hata metni ile yazarla iletişim kurun.
  • **NUI hatalarıF8'de (menü kendisi, HTML ve JavaScript'te yazılı) SCRIPT ERROR olarak gösterilmez. NUI geliştirici araçlarını okumak için açın: F8 konsolundaki nui_devtools komutu bunları tarayıcı sekmesinde açar.
  • İlk saniyeler hataları: sunucuyu başlattığınızda, yüklenmesi başarısız olan kaynakların hataları çabuk geçebilir. Konsolu ara veya yukarı kaydırın ya da sadece bu kaynağı yeniden başlatın ve izleyin.

Yardım istediğinizde ne gönderilebilir

Tam hatayı, stack trace dahil, metin olarak kopyalayın ve F8'den mi veya sunucu konsolundan mı geldiğini söyleyin. İşaret ettiği kod satırını ve kullandığınız çerçeveyi ekleyin. Tek bir satırın ekran görüntüsü kimsenin size yardımcı olması için yeterli değildir.

Kontrol listesi

Belirtisi Çözüm
@resource/path.lua:42 O kaynakta dosyayı açın ve 42. satıra gidin
Kütüphane dosyasındaki hata Stack trace'i kendi betiğinizin ilk satırı takip edin
citizen:/scripting/lua/... satırları FiveM dahiliyet: onları göz ardı edin
F8'de hiçbir şey ama özellik başarısız Sunucu konsolunu okuyun
Başarısız satırda birkaç değişken Her birini type() ve json.encode() ile yazdırın
Hata dosyası okunamaz Escrow betiği: tam hata metnini yazara gönderin
NUI menü başarısız nui_devtools açın ve tarayıcı konsolunu okuyun

Kısa yanıtlar

İstemci betik hatasını nerede göreceğim?

Oyunda F8 tuşuna basarak istemci konsolunu açın. İstemci betiklerinden gelen hatalar kırmızı olarak orada, kaynak adı ve satırı ile gösterilir.

Sunucu betik hatasını nerede göreceğim?

Sunucu konsolunda, txAdmin'de Live Console sayfası veya sunucunun çalıştığı terminal penceresidir. Sunucu hatalarıF8'de gösterilmez.

Hata başka bir kaynağın dosyasını gösteriyor. Bu betik kırılmış mı?

Her zaman değil. Stack trace'i daha aşağıya bakın: o kaynağa yanlış veya eksik argümanlarla çağıran satır çoğu zaman gerçek nedenidir.

Bu sorunu yaşatmayan scriptler

Mic PhoneTablete dönüşen katlanabilir bir telefon; oyuncunun gerçek telefonuna da taşınır.Scripti gör →CCTV Security CamerasYerleştirilebilir kameralar, canlı çoklu görüntü tableti ve basılı delil fotoğrafları.Scripti gör →Advanced BoostingTabletten araç boosting: D’den S+ sınıfına kontratlar, ekipler ve canlı sıra.Scripti gör →

Okumaya devam edin