1 mesaj
Membru Începător Membru Începător
  • Mesaje: 8
  • Reacții: 10
  • Mesaje utile: 1
  • Medalii

    In acest tutorial o sa va arat cum sa faceti debugging clientului vostru intr-un mod profesional + cum sa folositi Hot Reload (modificare sursa "live" - beneficiezi de modificari rapide fara a iesi din client si fara a recompila toata sursa din nou. Am vazut pe mai multe forumuri ca lumea doreste sa faca asta insa nu am vazut nicaieri un tutorial full, pe intelesul tuturor. (de parca ar da de la ei.. :-?? dar asta e, foamea e mare, dar e facuta si sa o simti :@) ). Anyway, sa incepem.

    In acest tutorial voi folosi sursa martysama 5.8 p23, insa debugging-ul il puteti face pe orice sursa. Recomand sa faceti un backup inainte, in caz de omiteti ceva la un pas sau in caz de va pierdeti prin setari/configurari.

    Optional, insa recomand: Stergeti folderul ".vs" din folderul sursei binary (Este un folder ascuns generat automat care are rolul de a stocha date temporare și configuratii specifice sesiunii de lucru pentru a imbunătăți performanta si experienta utilizatorului. Practic, daca il stergi stergi Cache-ul.) + fisierele .obj / .pch / .tlog etc (efectiv folderele "Release") <--> Curatare totala

    Automat, daca vrem sa facem debugging, trebuie sa recompilam sursa in modul Debug, dar mai intai trebuie sa schimbam niste setari in proiectul .sln.
    Deschide .sln-ul si seteaza modul de build pe Debug Win32
    [Tutorial] Binary Debugging + Hot Reload - Visual Studio - Mesaj 1 - Imagine 1

    Intra in Options in meniul Debug
    [Tutorial] Binary Debugging + Hot Reload - Visual Studio - Mesaj 1 - Imagine 2
    si bifeaza optiunea Show disassembly if source is not available
    [Tutorial] Binary Debugging + Hot Reload - Visual Studio - Mesaj 1 - Imagine 3

    Apoi, da click dreapta pe UserInterface -> Options si intra in tabul "Linker" -> "Debugging". Acolo seteaza:
    Generate Debug Info: Generate Debug Information optimized for sharing and publishing (/DEBUG:FULL)
    Generate Map File: Yes (/MAP)
    Map Exports: Yes (/MAPINFO:EXPORTS) (optional, dar util pentru diagnosticarea crash-urilor complexe)
    Debuggable Assembly: Yes (/ASSEMBLYDEBUG)
    [Tutorial] Binary Debugging + Hot Reload - Visual Studio - Mesaj 1 - Imagine 4

    Acum selecteaza toate cele 16 proiecte (de la CWebBrowser la UserInterface) , apasa click-dreapta si intra la options.
    In tabul "C/C++" -> "General" seteaza Debug Information Format: Program Database for Edit And Continue (/ZI)
    In tabul "C/C++" -> "Optimization" seteaza Optimization: Disabled (/Od)
    Verifica inca o data daca aceste doua setari s-au schimbat in toate cele 16 proiecte (Important)

    Recompileaza sursa folosind optiunea "Rebuild Solution" sau "Clean Solution" + "Build Solution" . Nu folosi "Build Solution" !
    Este foarte posibil ca in modul "Debug" sa iti apara mult mai multe warning-uri decat de obicei. (Este normal) . Modul "Debug" este mai "exigent"/"aspru".
    Dupa ce ai compilat sursa, copiaza launcherul debug (.exe) + fisierul .pdb (are acelasi nume ca launcherul) in folderul clientului tau. Fara fisierul .pdb debugging-ul nu va arata liniile de cod cand apare o eroare. PDB = Program Debug Database, practic este "traducerea" erorilor, definindu-le si localizandu-le.
    Exemplu:
    [Tutorial] Binary Debugging + Hot Reload - Visual Studio - Mesaj 1 - Imagine 5

    Acum ai doua variante prin care poti porni debugging-ul:
    A. Varianta I - Direct prin intermediul Visual Studio
    Intra in setarile Solutiei (Proiectul cel mare <-> cel care contine cele 16 proiecte; de obicei numit "Solution 'Metin2Client'")
    In tabul Common Properties -> Configure Startup Projects seteaza Single startup project: UserInterface
    UserInterface -> Properties
    In tabul Configuration Properties -> Debugging:
    Working Directory: selecteaza locatia clientului tau. Atentie: asigura-te ca linia cu destinatia se incheie cu "\". Exemplu: D:\Client\
    Command: selecteaza launcherul tau (debug .exe)

    Acum poti rula clientul in modul debug direct din Visual Studio apasand tasta F5 sau dand click pe "Local Windows Debugger"
    [Tutorial] Binary Debugging + Hot Reload - Visual Studio - Mesaj 1 - Imagine 6

    Daca se deschide o fereastra care te anunta ca ai nevoie de permisiuni de administrator nu este nicio problema. Selecteaza "Restart under different credentials" iar Visual Studio va reporni cu drepturi de administrator.

    Iar de aici incolo incepi un nou capitol in development si testing. Poti testa orice functie din client incetinind-o (pas cu pas), poti verifica CPU/GPU Usage, efectiv ai acces total la orice test. In caz de crash-uri erori <-> vei primi exact raspunsul si cauza.

    B. Varianta a II-a de rulare a debugging-ului:
    Mai intai pornesti clientul normal si dupa in Visual Studio in tabul Debug selectezi "Attach to Process" si dupa selectezi procesul clientului tau.
    [Tutorial] Binary Debugging + Hot Reload - Visual Studio - Mesaj 1 - Imagine 7
    Eu sincer prefer prima varianta pentru ca beneficiezi si de acea consola tip CMD + raspunsuri mai fluente/exacte.

    Si sa nu ziceti ca sunt baiat rau va arat si cum sa folositi Hot Reload (modificari in sursa "live" <-> fara a recompila toata sursa si fara a iesi din client)
    UserInterface -> Properties. In tabul Linker -> General seteaza Enable Incremental Linking: Yes (/INCREMENTAL)
    Dupa ce activezi Incremental Linking -> "Rebuild Solution"
    Sa fii atent la finalul recompilarii daca apare "ignoring '/INCREMENTAL'" . Asta va duce la dezactivarea Incremental Linking iar Hot Reload nu va functiona.
    In 90% din cazuri va aparea:
    libjpeg-MTd.lib(jerror.obj) : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance
    LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/LTCG' specification
    Problema este cauzata de faptul ca optiunile LTCG (Link Time Code Generation) si Incremental Linking sunt incompatibile. /LTCG este o tehnica de optimizare finala care necesita o analiza completa a codului, in timp ce /INCREMENTAL are ca scop viteza, recompiland doar bucatile modificate. In cazul de fata compilerul a detectat o librarie care a fost compilata cu /GL deci va compila toata sursa cu /LTCG.
    Insa problema si mai mare este ca nu putem modifica din setarile sursei deoarece libraria compilata cu /GL este una externa si anume libjpeg-MTd.lib, codul ei sursa fiind greu de gasit, deci nici nu o putem recompila separat folosind setarile necesare.
    INSA exista o rezolvare, bineinteles. Exista pentru orice :-?

    Instaleaza CMAKE si NASM.
    Descarca https://github.com/libjpeg-turbo/libjpeg-turbo (Fie normal fie prin comanda git clone)
    Deschide PowerShell in folderul libjpeg-turbo
    Ruleaza comanda mkdir build , apoi cd build
    Ruleaza comanda cmake -G "Visual Studio 17 2022" -A Win32 .. (Daca folosesti Visual Studio 2022)
    cmake -G "Visual Studio 16 2019" -A Win32 .. (Daca folosesti Visual Studio 2019)
    Dupa ce ai rulat comanda anterioara ruleaza: cmake --build . --config Debug
    Dupa compilare intra in folderul debug din build si cauta jpeg-static.lib
    Copiaza-l, redenumeste-l si inlocuieste-l cu libjpeg-MTd.lib din Extern/lib
    Acum vei putea compila sursa binary fara probleme folosind si flag-ul /INCREMENTAL .
    Si ai castigat si viteza marita in gestionarea imaginilor din client (aproximativ 5x)
    Observatie: Daca vrei sa folosesti acelasi lib si pe Release o sa trebuiasca sa il recompilezi cu CMAKE folosind comanda cmake --build . --config Release

    Insa mai avem un pas de facut.
    Intra in extern/cryptopp/crytplib.sln
    Seteaza Buildul pe Debug Win32
    cryptlib -> Properties. In tabul C/C++ -> General selecteaza Debug Information Format: Program Database for Edit And Continue (/ZI)
    Compileaza.

    Acum poti recompila sursa binary. Dupa ce o recompilezi si pornesti debuggerul din Visual Studio fa orice modificare in sursa, apoi apasa pe acest buton:
    [Tutorial] Binary Debugging + Hot Reload - Visual Studio - Mesaj 1 - Imagine 8
    sau apasa tastele ALT + F10 pentru a actualiza sursa instant.

    :-c :-c

    Nou Cum descarc de pe TeraBox?

    Afișează detalii Ascunde detalii
    • Este asemănător cu Mega.nz
    • Instalați-vă clientul lor de Download de aici
    • Faceți-vă un cont (vă puteți loga cu Facebook / Google / etc)
    • Nou Dacă nu vreți să descărcați clientul de Download, folosiți acest site
    • Gata! Acum puteți descărca resursele rapid & simplu.

    De ce folosim TeraBox?

    • Este gratuit
    • Primești 1TB de spațiu gratuit la orice cont creat!
    • Este ușor de folosit și varianta premium este foarte ieftină
    • Fișierele nu sunt șterse niciodată
    TeraBox logo

    Creează-ți un cont sau autentifică-te pentru a participa la discuție

    Trebuie să fii membru pentru a răspunde

    Creează-ți un cont

    Membrii pot crea subiecte noi și pot descărca resurse Metin2 Gratuit!


    Te poți înregistra sau conecta rapid utilizând contul tău de Discord, Github sau Google.

    Înregistrare

    Autentifică-te

    Înapoi la “Tutoriale”

    Informații

    Utilizatori ce navighează pe acest forum: carpiiii, header și 1 vizitator

    Discord ID copiat: