µLua DS - Forum officiel | Official forum Index du Forum

µLua DS - Forum officiel | Official forum
Le bon endroit pour en savoir plus sur MicroLua et pour parler de vos projets ! | The right place to learn more about MicroLua and talk about your projects !

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer   ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Modifications de Debug

 
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Coin du dév' -> Librairies
Sujet précédent :: Sujet suivant  
Auteur Message
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Jeu 27 Sep 2012 - 09:46    Sujet du message: Modifications de Debug Répondre en citant

Pour ceux que cela intéresse, j'ai apporter quelques modification à la table Debug et à l'affichage du blue screen.

Ces modifications sont faites dans le fichier /lua/libs/libs.lua, je vous fournis tout le fichier donc pour ceux qui ne l'ont pas modifié, vous copier tout et vous remplacer tout dans le fichier sur votre DS, pour les autres vous copier que ce qui vous intéresse.

Les modifications:

 - Lors de l'affichage d'un blue screen, s'affiche sur l'écran du haut tout ce que vous aviez envoyer à Debug.print appelé 'DEBUG STACK'
 - Est affiché en tout temps( lorsque l'on appelle Debug.ON() et disparait à l'appelle de Debug.OFF() )  en bas à droite de l'écran du haut la RAM utilisé, la VRAM disponible et le FPS
 - Vous pouvez maintenant envoyer n'importe quelle variable à Debug.print(), à condition qu'elle ne soit pas concaténé.
 -- Si vous avez un tableau sous le nom de 'tableau' , vous faites Debug.print(tableau) et s'affichera dans le debug stack :
<table: 0xad_mémoire_de_la_variable[nb_d'elements]>
avec pour 'ad_mémoire_de_la_variable' un chiffre hexadécimal
et pour 'nb_d'element' un entier représentant le nombre d'élément indexé contenu dans la table.

 -- Si la variable est nulle, s'affichera dans le debug stack <nil>
 -- Si c'est un booléen <TRUE> ou <FALSE>
 -- Si c'est une fonction <function: 0xad_memoire_de_la_fonction>
 -- Si c'est un userData <userdata: 0xad_memoire_du_user_data>
 -- Si c'est un thread <thread: 0xad_memoire_du_thread>
 


 
Code:
screen.setSpaceBetweenScreens(10)
mustCountFPS = true

startDrawing = function()
    screen.startDrawing2D()
end

stopDrawing = function()
    -- Count FPS
    if mustCountFPS then
        NB_FPS_COUNTER = NB_FPS_COUNTER + 1
        mustCountFPS = false
    else
        mustCountFPS = true
    end
    if tmrFpsCounter:time() >= 1000 then
        NB_FPS = NB_FPS_COUNTER
        NB_FPS_COUNTER = 0
        tmrFpsCounter:reset()
        tmrFpsCounter:start()
    end

    -- Draw debug console
    if Debug.isDebugOn then
        local buffer="FPS: "..NB_FPS
        local xx=255-(string.len(buffer)*6)
        screen.print(SCREEN_UP,171,162,"RAM : "..math.floor(collectgarbage("count")).."o.",Debug.debugColor)
        screen.print(SCREEN_UP,171,172,"VRAM: "..System.CurrentVramFree().."o.",Debug.debugColor)
        screen.print(SCREEN_UP,171,182,"FPS : "..NB_FPS,Debug.debugColor)
        screen.drawTextBox(SCREEN_DOWN, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, Debug.debugText, Debug.debugColor)
    end

    screen.setAlpha(ALPHA_RESET)
    screen.endDrawing()
    screen.waitForVBL()        
end

render = function()
    stopDrawing()
    startDrawing()
end

Timer = {
    new = function()
        local t = os.time()
        local isStarted = false
        local tick = 0
        local time = function(self)
        if isStarted then return os.time() - t
            else return tick end
        end
        local stop = function(self)
            if isStarted then
                isStarted = false
                tick = os.time() - t
            end
        end
        local start = function(self)
            if not isStarted then
                isStarted = true
                t = os.time() - tick     
            end
        end
        local reset = function(self)
            t = os.time()
            isStarted = false
            tick = 0                
        end

        return{
            time = time,
            stop = stop,
            start = start,
            reset = reset
        }
    end
}

Debug = {}
Debug.isDebugOn = false
Debug.listText = {}
Debug.debugText = ""
Debug.debugColor = Color.new(31, 31, 31)

Debug.ON = function()
    Debug.isDebugOn = true
    Debug.clear()
end

Debug.OFF = function()
    Debug.isDebugOn = false
end

Debug.print = function(text,aff)
    local i
    --assert(text ~= nil, "Text can't be null")
    if(text == nil) then text = "<nil>"
    elseif(text == true) then text = "TRUE"
    elseif(text == false) then text = "FALSE"
    elseif(type(text) == "table") then text = "<"..tostring(text).."["..table.maxn(text).."]>"
    elseif(type(text) == "userdata") then text = "<"..tostring(text)..">"
    elseif(type(text) == "function") then text = "<"..tostring(text)..">"
    elseif(type(text) == "thread") then text = "<"..tostring(text)..">"
    end
    if(aff ~= nil) then
        if(aff ~= true) then aff = false end
    end
    if(#Debug.listText == 21) then
        for i=1,20 do
            Debug.listText[i] = Debug.listText[i+1]
        end
        Debug.listText[21] = text
    else
        table.insert(Debug.listText,text)
    end
    Debug.debugText = ""
    for i = 1,#Debug.listText do
        Debug.debugText = Debug.debugText..Debug.listText[i].."\n"
    end
    if aff then render() end
end

Debug.setColor = function(color)
    assert(color ~= nil, "Color can't be null")
    Debug.debugColor = color
end

Debug.clear = function()
    local i
    for i = 1,#Debug.listText do
        table.remove(Debug.listText,1)
    end
end

DateTime = {}
DateTime.new = function()
    local year, month, day, hour, minute, second
    return {year = year, month = month, day = day, hour = hour, minute = minute, second = second}
end

DateTime.getCurrentTime = function()
    local dt = DateTime.new()
    dt.year = System.getCurrentTime(0)
    dt.month = System.getCurrentTime(1)
    dt.day = System.getCurrentTime(2)
    dt.hour = System.getCurrentTime(3)
    dt.minute = System.getCurrentTime(4)
    dt.second = System.getCurrentTime(5)
    return dt
end

-- Declaration of the Sprite class
Sprite = {
    -- path: path of the file which contains the sprite
    -- height: height of the frames
    -- width: width of the frames
    -- dest: destination (RAM or VRAM)
    new = function(path_, width_, height_, dest)
        assert(path_ ~= nil, "Path can't be null")
        assert(width_ > 0, "Width must be positive")
        assert(height_ > 0, "Height must be positive")
        assert(dest == RAM or dest == VRAM, "Destination must be RAM or VRAM")
        local path = path_
        local height = height_
        local width = width_
        local img = Image.load(path, dest)
        local animations = {}
        -- ### Public methods ###
        -- Draw a frame
        -- scr: screen (SCREEN_UP or SCREEN_DOWN)
        -- x: X-coordinate where to draw the frame
        -- y: Y-coordinate where to draw the frame
        -- noFrame: number of the frame to draw
        local drawFrame = function(self, scr, x, y, noFrame)
            assert(scr == SCREEN_UP or scr == SCREEN_DOWN or scr == SCREEN_BOTH, "Bad screen number")
            assert(x ~= nil, "X can't be null")
            assert(y ~= nil, "Y can't be null")
            assert(noFrame ~= nil, "Frame number can't be null")
            boardWidth = Image.width(img) / width
            yy = math.floor(noFrame / boardWidth)
            xx = noFrame - (yy * boardWidth)
            screen.blit(scr, x, y, img, xx*width, yy*height, width, height)
        end
        -- Create an animation
        -- tabAnim: the table of the animation frames
        -- delay: delay between each frame
        local addAnimation = function(self, tabAnim, delay)
            assert(tabAnim ~= nil, "Table can't be null")
            assert(delay >= 0, "Delay  must be positive")
            tmp = SpriteAnimation.new(tabAnim,delay)
            table.insert(animations, tmp)
        end
        -- Reset an animation
        -- noAnim: number of the animation
        local resetAnimation = function(self, noAnim)
            assert(noAnim > 0, "Animation number must be 1 or more")
            animations[noAnim].tmr:reset()
        end
        -- Start an animation
        -- noAnim: number of the animation
        local startAnimation = function(self, noAnim)
            assert(noAnim > 0, "Animation number must be 1 or more")
            animations[noAnim].tmr:start()
        end
        -- Stop an animation
        -- noAnim: number of the animation
        local stopAnimation = function(self, noAnim)
            assert(noAnim > 0, "Animation number must be 1 or more")
            animations[noAnim].tmr:stop()
        end
        -- Return true if the animation is at the end of a loop
        -- noAnim: number of the animation
        local isAnimationAtEnd = function(self, noAnim)
            assert(noAnim > 0, "Animation number must be 1 or more")
            return math.floor(animations[noAnim].tmr:time()/animations[noAnim].delay+1) >= table.getn(animations[noAnim].tabAnim)
        end
        -- Play an animation
        -- scr: screen (SCREEN_UP or SCREEN_DOWN)
        -- x: X-coordinate where to draw the animation
        -- y: Y-coordinate where to draw the animation
        -- noAnim: number of the animation to draw
        local playAnimation = function(self, scr, x, y, noAnim)
            assert(scr == SCREEN_UP or scr == SCREEN_DOWN or scr == SCREEN_BOTH, "Bad screen number")
            assert(x ~= nil, "X can't be null")
            assert(y ~= nil, "Y can't be null")
            assert(noAnim > 0, "Animation number must be 1 or more")
            if not animations[noAnim].isPlayed then
                animations[noAnim].tmr:reset()
                animations[noAnim].tmr:start()
                animations[noAnim].isPlayed = true
            end
            if math.floor(animations[noAnim].tmr:time()/animations[noAnim].delay) >= table.getn(animations[noAnim].tabAnim) then
                resetAnimation(self, noAnim)
                startAnimation(self, noAnim)
            end
            animToDraw = animations[noAnim].tabAnim[math.floor(animations[noAnim].tmr:time()/animations[noAnim].delay)+1]
            if animToDraw ~= nil then
                drawFrame(self, scr, x, y, animToDraw)
            end
        end
        local getWidth = function(self)
            return width
        end
        local getHeight = function(self)
            return height
        end
        local destroy = function(self)
            local key, value
            for key, value in pairs(animations) do
                value = nil
            end
            Image.destroy(img)
            img = nil
        end
        -- ### Returns ###
        return {
            path = path,
            getWidth = getWidth,
            getHeight = getHeight,
            drawFrame = drawFrame,
            addAnimation = addAnimation,
            playAnimation = playAnimation,
            resetAnimation = resetAnimation,
            stopAnimation = stopAnimation,
            startAnimation = startAnimation,
            isAnimationAtEnd = isAnimationAtEnd,
            destroy = destroy
        }
    end
}

-- Declaration of the SpriteAnimation class
SpriteAnimation = {
    -- tabAnim: the table of the animation frames
    -- delay: delay between each frame
    new = function(tabAnim_, delay_)            
            local tabAnim = tabAnim_
            local delay = delay_
            local tmr = Timer.new()
            local isPlayed = false
            return {
                tabAnim = tabAnim,
                delay = delay,
                tmr = tmr,
                isPlayed = isPlayed
            }
    end
}

dofile(ULUA_LIBS.."ini.lua")

-- ################################ START ################################

screen.init()
os.initTimer()    

NB_FPS = 30
NB_FPS_COUNTER = 0
tmrFpsCounter = Timer.new()
tmrFpsCounter:start()

startDrawing()

While true do
    local func = function () dofile(ULUA_LIBS.."shell.lua") end
    status_global_microlua_errors, err_global_microlua_errors = pcall(func)
    if err_global_microlua_errors ~= nil then
        Debug.OFF()    
        Controls.read()
        while not Keys.newPress.Start do
            Controls.read()
            screen.drawFillRect(SCREEN_UP, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, Color.new(0, 0, 31))
            screen.drawTextBox(SCREEN_UP,0,0,SCREEN_WIDTH,SCREEN_HEIGHT,"**** DEBUG STACK ****\n"..Debug.debugText)
            screen.drawFillRect(SCREEN_DOWN, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, Color.new(0, 0, 31))
            screen.drawTextBox(SCREEN_DOWN, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, "*** ERRORS OCCURED ***\n"..err_global_microlua_errors.."\n"..debug.traceback().."\n*********************\n\nPress START to continue\n")
            render()
        end
    end
end


_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
Publicité






MessagePosté le: Jeu 27 Sep 2012 - 09:46    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Fantasix
Modérateur

Hors ligne

Inscrit le: 26 Avr 2010
Messages: 1 317
Localisation: SCREEN_UP, en -1, -1

MessagePosté le: Jeu 27 Sep 2012 - 10:07    Sujet du message: Modifications de Debug Répondre en citant

Yeah, cool de pouvoir voir la mémoire quand ça crash !

Par contre, hum ... Un thread ? En lua ? Ça existe et on ne me l'avais pas dit ? @_@ (La DS ne doit pas aimer de toute façon :p)

Fanta'
_________________


BMA News :

Création du Homebrew Storage en cours ...


Revenir en haut
Visiter le site web du posteur
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Jeu 27 Sep 2012 - 10:09    Sujet du message: Modifications de Debug Répondre en citant

Mais si ça marche, c'est en fait les coroutines, c'est pas du multithread mais c'est du thread
 Voir ici

[EDIT] je m'avance peut être un peu trop en disant que ça marche, vu que j'ai pas tester. mais les coroutines sont bien considérée comme des threads par lua.
_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
thermo_nono
Modérateur

Hors ligne

Inscrit le: 31 Déc 2008
Messages: 2 415
Localisation: La Géhenne

MessagePosté le: Jeu 27 Sep 2012 - 12:25    Sujet du message: Modifications de Debug Répondre en citant

Merci beaucoup ! C'est une belle avancée. J'ai un peu mis de côté µlua depuis que j'ai reçu mon Arduino et mon RPi, mais je sent que je vais bientôt m'y remettre histoire de tester tout ça. 
Okay Okay Okay  (je met 3 pouces en l'air avant même d'avoir essayé, mais je ne doute pas que ça tourne aussi bien que tout le reste.. à l'instar de Goldman Stacks, je rétrograderai la note le cas échéant.  Razz ) 
_________________
“Qui reçoit une idée de moi reçoit de la connaissance sans diminuer la mienne, comme celui qui allume sa chandelle à la mienne reçoit la lumière sans me plonger dans l’obscurité.” - Thomas Jefferson


Revenir en haut
Visiter le site web du posteur MSN
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Jeu 27 Sep 2012 - 22:34    Sujet du message: Modifications de Debug Répondre en citant

(t'as trouvé le troisième pouce où thermo_nono ?)
(en fait je veux pas savoir)

Je vais tenter de penser à voir ça ce weekend (oui c'est trop conditionnel), mais je suppose que ça marche bien donc libre à toi de le comitter. D'ailleurs faut que je mette à jour ça pour mes propres trucs...
*se fouette lui-même pour oubli aux règles qu'il a lui-même fixées*
Disons que j'essaierai de sortie une 4.5.3, version facultative pour les simples joueurs.
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Ven 28 Sep 2012 - 00:13    Sujet du message: Modifications de Debug Répondre en citant

oui je comptait le faire mais ..., j'ai cramé mon portable et faut que je reinstall git et que je clone de nouveau le dépot de google et ... pas la motive pour le moment alors j'ai posté là pour qu'il soit aussi plus rapidement dispo à ceux que ça intéresse. Mais je vais le comiter entre deux lignes de codes, parce que la avec ma mise à jour de luaWidget, c'est tous les fichiers du shell que je doit rendre compatible avec cette nouvelle version qui me plait de plus en plus.. Je suis impatient de vous la fournir.

[EDIT 06/10/2012]

Ayé c'est commiter, par contre je sait pas ce qui se passe, mais je compile sans erreur et la rom ne fonctionne pas quand même Sad
_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Sam 6 Oct 2012 - 21:56    Sujet du message: Modifications de Debug Répondre en citant

Je regarde ce qu'il se passe... T'as committé un truc avec une bonne base au moins ? :p

En fait ou pas, je finis un rajout que j'avais fait dans un lointain passé et que je n'avais pas commité :p
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Dim 7 Oct 2012 - 14:01    Sujet du message: Modifications de Debug Répondre en citant

t'inquiéte, mon commit n'a rien modifié aux sources de microlua (juste le fichier lib), c'est juste mon devkitpro qui veut pas compiler correct, j'ai fait les tests avec les sources de microlua d'avant mes modifs
_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Lun 8 Oct 2012 - 16:20    Sujet du message: Modifications de Debug Répondre en citant

Ah ok... Il est à jour ? Chez moi ça marche bien, tu dois probablement avoir besoin de modifier la µLib.
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Lun 8 Oct 2012 - 17:08    Sujet du message: Modifications de Debug Répondre en citant

Oui c'est peut etre ça, j'ai essayer le week-end dernier à recompiler la microlib, mais j'ai pas réussi, je réessayerai le week-end ci.
_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Dim 14 Avr 2013 - 15:34    Sujet du message: Modifications de Debug Répondre en citant

*beaucoup plus tard*
J'ai fais une version améliorée (encore): si, au blue screen, on appuie sur Select, le crash est enregistré dans "microlua.log" ! A la base, c'était pour connaitre les erreurs quand les caractères ressemblaient à des graffitis ... Mais ça peut servir pour montrer ses crash sans avoir à les recopier !
Le crash enregistré contient aussi:
-la version de µLua utilisée
-la version de Lua
-l'heure du crash
Et en plus, c'est rapide !

téléchargement: ici !
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 03:45    Sujet du message: Modifications de Debug

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Coin du dév' -> Librairies Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com