Domanda [Da leggere prima di postare] Come richiedere aiuto nella maniera più efficace

Arves100

Utente Emerald
15 Febbraio 2011
515
46
378
418
Ultima modifica:
In questo topic vorrei fornire, almeno a mio parere, delle linee guida che possano servire a comprendere velocemente il problema che si presenta nel vostro server.

  • Definire in modo semplice e conciso il proprio problema.
    Esempio di descrizione efficace: "Ho provato ad implementare le stole, quando le indosso, le stole vanno correttamente nello slot, ma non si vedono."

  • Specificare la versione del programma che si stà usando o del proprio compilatore.
    Esempio in caso di source: "Sto utilizzando FreeBSD 12.0 con GCC 7.0 nel Server, e Visual Studio 2017 sul Client"
    In caso di un programma come 3DS Max: "Sto utilizzando 3DS Max 2013 con l'exporter GR2 versione 2.9"
    Per controllare la versione del vostro compilatore (lato Server) aggiungete --version al comando di base.
    Ad esempio se volessi controllare la versione di GCC digiterei:
    Codice:
    gcc --version

  • Inviare SEMPRE qualunque messaggio di errore che potreste ricevere dal programma che state usando. (Ad esempio 3DS Max o il WorldEditor)

  • Scrivere, se fosse possibile, i file server e revisione che si stanno utilizzando in caso fossero pubblici o acquistati da venditori conosciuti.

  • I file log (syserr.txt, syslog.txt, syserr e syslog) SONO FONDAMENTALI per risolvere un problema, in quanto il 60% dei casi tutti gli errori sono scritti li. In caso non ci sia nessun log inerente, semplicemente specificatelo nel post.
    Esempio: "Ho controllato i vari syserr, ma non ho trovato nulla di interente al problema".

  • Se il vostro server vi crasha (quindi genera un .core), NON RILASCIATE il .core, in quanto è inutile senza il game. Dovete rilasciare uno StackTrace. (è l'unica risorsa in italiano che ho trovato, il funzionamento è lo stesso anche per il C++ o il Python)
    Non è necessario rilasciare tutto lo StackTrace, le prime 4 o 5 righe vanno bene.


    Lato Server: Generalmente si può ottenere uno StackTrace utilizzando il debugger GDB.
    Aprire il debugger con la riga di comando (controllate di essere nella cartella dove si trova il file .core"
    Codice:
    gdb "file game" "file .core"

    Una volta nella schermata digitate principale digitate il comando
    Codice:
    bt full
    Tutto quello spezzetone di codice corrisponde al vostro StackTrace, per continuare a visualizzare la traccia premere Invio, altrimenti premere Q.
    Una volta che siete ritornati alla schermata precedente, digitate
    Codice:
    Quit
    per uscire.

    Python: lo StackTrace si trova all'interno del file Syserr.txt.

    Source Client: Lo StackTrace è disponibile SOLO quando di debugga utilizzando Visual Studio, o al momento di un crash in runtime (si potrebbe utilizzare anche il debugger in linea di comando).
    Durante un crash, cliccate il tasto Riprova, si aprirà una schermata che chiederà la versione di Visual Studio (in caso avete più debugger e/o avete più Visual Studio) cliccate su Si.
    Una volta che Visual Studio si è avviato, comparirà un piccolo box chiamato Eccezzione non gestita, all'interno di quel box troverete l'effettivo errore da postare.
    A questo punto lo StackTrace lo troverete in basso a destra nella finestra Stack di Chiamate.

  • Lo StackTrace segnala precisamente il file e la riga affetta dal problema, se vi trovaste ad inviare codice, inviate l'intera funzione (quella che inizia con le {, in caso del Python quella che inizia con def), o una parte di codice utile per scovare l'errore.

  • Gli errori relativi a MySQL, RICHIEDONO postare il file log di MySQL, reperibile in /var/db/mysql, il file .err. Su Windows questo log si può trovare qui (C:/Program Files/MariaDB XX.X/data o in C:/ProgramData/Mysql Server X.X/data).

  • Per gli errori relativi alle query, è necessario inviare le righe affette dall'errore (Disabilitare l'opzione di processare più righe contemporaneamente e disattivare l'opzione di continuare in caso accade un errore per avere la riga esatta che manifesta l'errore).

  • In caso riesci a risolvere la tua domanda, PRECISA SEMPRE come sei riuscito a risolvere il tuo problema, in modo che altri utenti potranno visualizzare la tua discussione senza crearne un altra.

Vi consiglio, per capire meglio eventuali errori in source, di utilizzare le modalità di Debug nel Client (cambiando il tipo di soluzione in alto da Release/Distribute in Debug) e nel Server (Aggiungere -g3 in CFLAGS).

Se utilizzate un game strippato, il debug NON FUNZIONERÀ CORRETTAMENTE, in quanto il comando strip cancella le informazioni di debug da un file. In genere, un file game non strippato pesa sui 40MB, un file db non strippato sui 15MB. (La dimensione può variare in base alle source, sui vanilla core il peso è vicino ai 54MB)

Ci tengo a precisare di controllare sempre se si stà rilasciando Password, Source intere, IP o informazioni potenzialmente sensibili nel proprio post.



Spero che le idee si siano un po' chiarite, buona fortuna con i vostri errori.
 
Aggiungerei riguardo all'uso del debugger che se il file game è strippato il debugger non avrà modo di funzionare correttamente. Ho visto che molte guide consigliano di strippare il file game/db post compilazione per cui per i novellini meglio ribadire che per debuggare con il file game o db , il binary deve essere "vergine" dopo il comando di compilazione (gmake in genere) e pesare circa oltre 15megabyte per il db e circa oltre i 40 per il game. L uso del comando "strip" o "gmake strip" compromette il futuro uso del debugger sul binary in questione.

Anyway post probabilmente utile, se solo fosse davvero letto prima di postare..
Complimenti per l idea

Inviato dal mio LG-H870 utilizzando Tapatalk
 
Aggiungerei riguardo all'uso del debugger che se il file game è strippato il debugger non avrà modo di funzionare correttamente. Ho visto che molte guide consigliano di strippare il file game/db post compilazione per cui per i novellini meglio ribadire che per debuggare con il file game o db , il binary deve essere "vergine" dopo il comando di compilazione (gmake in genere) e pesare circa oltre 15megabyte per il db e circa oltre i 40 per il game. L uso del comando "strip" o "gmake strip" compromette il futuro uso del debugger sul binary in questione.

Anyway post probabilmente utile, se solo fosse davvero letto prima di postare..
Complimenti per l idea

Inviato dal mio LG-H870 utilizzando Tapatalk
Ho aggiunto una nota riguardante il server strippato, mi ero dimenticato del comando.
 
Aggiungerei un punto finale, più che iniziale. Molti utenti risolvono e scrivono "risolto" (vedi una discussione recente sull'exp). Se mai qualcuno dovesse leggere questo post vorrei ricordare a coloro i quali risolvono un problema, di indicare COME lo hanno risolto sul forum (dato che GIUSTAMENTE mi è stato fatto notare di preferire l'aiuto sul forum rispetto alla risoluzione tramite skype, con lo scopo di lasciare una traccia per chi in futuro dovesse avere lo stesso problema). Altrimenti poi chi riscontra un problema simile ad una discussione aperta poi si trova a doversi confrontare con i vari santi perchè la soluzione al problema è stata trovata ma non condivisa.
 
Aggiungerei un punto finale, più che iniziale. Molti utenti risolvono e scrivono "risolto" (vedi una discussione recente sull'exp). Se mai qualcuno dovesse leggere questo post vorrei ricordare a coloro i quali risolvono un problema, di indicare COME lo hanno risolto sul forum (dato che GIUSTAMENTE mi è stato fatto notare di preferire l'aiuto sul forum rispetto alla risoluzione tramite skype, con lo scopo di lasciare una traccia per chi in futuro dovesse avere lo stesso problema). Altrimenti poi chi riscontra un problema simile ad una discussione aperta poi si trova a doversi confrontare con i vari santi perchè la soluzione al problema è stata trovata ma non condivisa.
Aggiunto alla lista, chiedo scusa per i 6 mesi di ritardo.
 
Ultima modifica:
Ciao! Sai mica se c'è un modo di fare hot reload del codice del gioco?
Ci sono alcune librerie interessanti a pagamento che potrebbero velocizzare di molto lo sviluppo
Ti sei mai interessato di questa cosa?
Ciao, provai tampo fa a fare hot reload del codice python direttamente da sorgente (senza dover chiamare reaload() ogni volta), il risultato fu crash su crash in quanto Metin2 non pulisce correttamente tutte le classi (ad esempio quelle delle mappe, degli item e cosi via), quindi ti raccomanderei di non provarci a meno che non sei pronto a risolvere molti dei memory leak e/o cattiva gestione della memoria nel gioco.
 
  • Mi piace
Reazioni: Cappuccino