Debug logging di Factorio mod


8

Saya sedang menulis mod Factorio, dan saya mencoba mencari tahu mengapa itu tidak berhasil. Bisakah saya melakukan semacam kesalahan / debug logging di suatu tempat? Baik manual (mencetak variabel) dan pelaporan kesalahan sederhana (mengakses properti yang tidak ada) akan bagus. Saya tahu tentang player.printmetode ini, tapi saya hanya bisa mencetak string literal, bukan objek:

script.on_event(defines.events.on_player_created, function(event)
    pcall(function()
        local player = game.get_player(event.player_index)
        player.print("Hi player") -- works
        player.print(player) -- does not work. Any error message would be nice
    end)
end)

Saya juga sudah mencoba file log di folder aplikasi, dan berbagai mode debug (F5 / F6 dalam game), tetapi sejauh ini belum menemukan sesuatu yang berguna.


Mungkin Anda menganggap itu akan secara otomatis menghasilkan string dari objek? Anda mungkin perlu membuat dan menggunakan semacam ToString()metode secara eksplisit .
MichaelHouse

Jawaban:


3

Menurut posting forum ini

Anda dapat meluncurkan game dari konsol, sehingga fungsi cetak standar akan mengirimkan hasilnya di sana. Anda dapat mengarahkan output itu ke file.

Ada printer cantik ular, yang dapat mencetak tabel lua - sintaks print(serpent.block(arg)).


1
Kedengarannya bagus, tetapi tidak cukup berhasil. Menjalankan factorio.exedari command prompt memulai permainan, tetapi segera kembali dan saya hanya melihat output dari baris log pertama. Menggunakan start factorio.exe /waittidak berfungsi, karena itu hanya membuka jendela konsol dan tidak memulai permainan sama sekali.
Jorn

1

Anda dapat menggunakan fungsi error () yang mengirim ke factorio-current.log

Sebagai contoh:

kesalahan ("Hai pemain")

atau

kesalahan (serpent_block (table_name))


serpent_block -> serpent.block
Tony Baguette

Ini benar-benar menunjukkan popup "kesalahan" dengan pesan di gim memuat dan mencegah mod dimuat.
Tony Baguette

0

Ada metode write_file di LuaGameScript.

game.write_file("mylog.log", serpent_block(table_name)) -- normal write
game.write_file("mylog.log", serpent_block(table_name), true) -- appending

( http://lua-api.factorio.com/0.15.23/LuaGameScript.html#LuaGameScript.write_file )

File tersebut akan berakhir di folder bernama di script-outputbawah %APPDATA%/Factorio, di sebelah scenariosfolder Anda .


1
Tampaknya tidak berfungsi dari data.lua
LOST

1
data.lua bukan skrip runtime yang normal. Tujuannya adalah untuk menggambarkan struktur data dan tidak ada yang lain. Sebagian besar (semua?) Objek runtime tidak dapat diakses selama interpretasinya. Khususnya objek LuaGameScript global yang disebut game bahkan tidak ada.
Martin Lütke
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.