Vés al contingut

Mòdul:SimpleDebug/ús

De la Viquipèdia, l'enciclopèdia lliure

Conté funcions per ajudar a depurar els mòduls lua. Permet recollir i visualitzar els valors de diverses variables i/o punts del vostre programa lua, des d'un mòdul (que és l'habitual) o en diversos mòduls (que són requerits des del mòdul principal).

Està dissenyat perquè les seves funcions siguin cridades des de dins del mòdul que es vol depurar, crides que hauran de formar part del codi (del mòdul que heu dissenyat, o que vol millorar o adaptar) fins que decidiu eliminar-les (quan ja hàgiu determinat l'error). Així, no s'ha de cridar cap de les seves funcions amb un invoke.

Usos

[modifica]
Un o diversos punts a veure
Abreviacions de les funcions: w: where (on). n: names (noms). v: variables. s: string (cadena).
Variables
Nom Per defecte
tab.oneline true
  • Si és false o és true i conté taules aniuades, mostrarà una línia per cada element de la taula i amb un sagnat per a cada taula aniuada.
  • Si és true i no conté taules aniuades, mostra la taula en una línia.
tab.allidx false

Si és true, també mostra els índexs numèrics d'una taula.

dec -1

Espais pels decimals:

  • -1: mostra tots els decimals necessaris.
  • 0: sense decimals.
  • n: 1: un decimal, 2: dos decimals, etc,
enabled true

Si és false, totes les crides a les funcions següents no fan res.

nohtml false

Substitueix < per ⪡ i > per ⪢ a les cadenes.

plaintext false

Elimina el format html.

Un punt a veure
Funcions
w (where)
  • where: etiqueta del punt.
v (...)
  • ...: un seguit de variables = var1, var2...
wv (where, ...)
  • where: etiqueta del punt.
  • ...: un seguit de variables = var1, var2...
nv (...)
  • ...: un seguit de parells de nom-variable = name1, var1, name2, var2....
wnv (where, ...)
  • where: etiqueta del punt.
  • ...: un seguit de parells de nom-variable = name1, var1, name2, var2....
Diversos punts a veure
Variables
Nom Per defecte
s

La variable de cadena que conté els valors retornats de les funcions següents.

maxlines.num 100

Nombre màxim de línies (en cridar a les funcions següents).

maxlines.doerror true

Si és veritat i s’arriba a maxlines.num, llavors es crida error(s).

counter false

Afegeix un número autoincremental al principi de cada utilització d'una funció.

Funcions
breakline ()

Afegeix un retorn de línia a s.

wtos (where)

Igual a where, però la cadena retornada es guarda a s.

vtos (...)

Igual a v, però la cadena retornada es guarda a s.

wvtos (where, ...)

Igual a wv, però la cadena retornada es guarda a s.

nvtos (...)

Igual a nv, però la cadena retornada es guarda a s.

wnvtos (where, ...)

Igual a wnv, però la cadena retornada es guarda a s.

Exemples

[modifica]

Un punt a veure

[modifica]

Seguint el flux

[modifica]
local SD = require "Module:SimpleDebug"
return SD.w ("S'ha passat per aquí")

retorna:

S'ha passat per aquí


Nombre de decimals i valor d'una variable

[modifica]
local SD = require "Module:SimpleDebug"
SD.dec = 2
return SD.v (1/3)

retorna:

0.33


Nohtml

[modifica]
local SD = require "Module:SimpleDebug"
SD.nohtml = true
return SD.v ("<b>bold</b>")

retorna:

"⪡b⪢bold⪡/b⪢"


Plaintext

[modifica]
local SD = require "Module:SimpleDebug"
SD.plaintext = true
return SD.v ("<b>bold</b>")

retorna:

"bold"


El valor de diverses variables

[modifica]
local SD = require "Module:SimpleDebug"
local a = 12
local b = 'Hola'
return SD.v (a,b)

retorna:

12  •  "Hola"


Detecció de variable no assignada

[modifica]
local SD = require "Module:SimpleDebug"
local a = true
return SD.v (a,b)

retorna:

true  •  nil


El valor d'una taula

[modifica]
local SD = require "Module:SimpleDebug"
local a = {1, tab='a', 'b'}
return SD.v (a)

retorna: { 1, "b", [tab]="a", }


local SD = require "Module:SimpleDebug"
local a = {{1,2,3},{4,5,6},{7,8,9}}
return SD.v (a)

retorna:

{
  [1] = {1, 2, 3, },
  [2] = {4, 5, 6, },
  [3] = {7, 8, 9, },
} 


local SD = require "Module:SimpleDebug"
local a = {{Primer=1,2,3},{4,Segon=5,6},{7,8,9}}
return SD.v (a)

retorna:

{ 
 [1] = {2, 3, [Primer]=1, },
 [2] = {4, 6, [Segon]=5, },
 [3] = {7, 8, 9, },
}


local SD = require "Module:SimpleDebug"
SD.tab.allidx = true
local a = {{1,2,3},{4,nil,6},{7,8,9}}
return SD.v (a)

retorna:

{ 
  [1]={[1]=1, [2]=2, [3]=3, }, 
  [2]={[1]=4, [3]=6, }, 
  [3]={[1]=7, [2]=8, [3]=9, }, 
}


Normalment, implementareu aquestes funcions amb funció d'error:

local SD = require "Module:SimpleDebug"
local a = {{1,2,3},{4,5,6},{7,8,9}}
error (SD.v (a))

mostra:

Error de Lua: Mòdul:VostreMòdul:Línia: {

  [1] = {1, 2, 3, },
  [2] = {4, 5, 6, },
  [3] = {7, 8, 9, },
}

El valor d'una taula, tota en multilínia

[modifica]
local SD = require "Module:SimpleDebug"
SD.tab.oneline = false
local a = {{Primer=1,2,3},'Enmig',{4,Segon=5,6}}
return SD.v (a)

retorna:

{
 [1] = {
     [1] = 2,
     [2] = 3,
     ["Primer"] = 1,
   },
 [2] = "Enmig",
 [3] = {
     [1] = 4,
     [2] = 6,
     ["Segon"] = 5,
   },
} 


El valor de diverses variables amb seu nom en un punt

[modifica]
local SD = require "Module:SimpleDebug"
local a = 12
local b = 'Hola'
return SD.nv ('a',a,'b',b)

retorna:

a: 12  •  b: "Hola"


Diversos punts a veure

[modifica]

Seguint el flux

[modifica]
local SD = require "Module:SimpleDebug" 
local tab = {1,12,7}
function p.CheckValues ()
  local function LittleNum()
    SD.wtos ('número petit')
  end
  local function BigNum(num)
    SD.wtos ('gran='..num)
  end
  for i, num in ipairs(tab) do
    if num > 9 then
      BigNum(num)
    else
      LittleNum()
    end  
  end  
  error (SD.s)
end

retorna:

Error de Lua: Mòdul:VostreMòdul:Línia:

número petit

gran=12

número petit.


Amb comptador

[modifica]
local SD = require "Module:SimpleDebug" 
function Increm()
  local n = 0
  for i = 1, 3 do
    n = n + 2
    SD.vtos (n)
  end
end
SD.counter = true
Increm()
return SD.s

retorna:

1  •  2

2  •  4

3  •  6


Seguiment de diverses variables

[modifica]
local SD = require "Module:SimpleDebug"
a = 12
b = 'Hola'
SD.wvtos (1,a,b)
a = a + a
b = b..' món!'
SD.wvtos ('Finalment',a,b)
return SD.s

retorna:

1 => 12  •  "Hola"

Finalment => 24  •  "Hola món!"


local SD = require "Module:SimpleDebug"
SD.breakline ()
a = 12
b = 'Hola'
c = false
SD.wnvtos (1, 'a',a,'b',b,'c',c)
a = a + a
b = b..' món!'
SD.wnvtos ('Finalment', 'a',a,'b',b)
error (SD.s)

mostra:

Error de Lua: Mòdul:VostreMòdul:Línia:

1 => a: 12  •  b: "Hola"  •  c: false

Finalment => a: 24  •  b: "Hola món!"


Variables i la seva presentació amb condicions

[modifica]
local SD = require "Module:SimpleDebug"
SD.breakline()
SD.enabled = false
SD.maxlines.num = 3
local a = 'AA'
for i = 1, 10 do
  a = a + 'AA'
  if i == 3 then
    SD.enabled = true
  end
  SD.wvtos (i, string.len(a), a)
end

mostra:

Error de Lua: Mòdul:VostreMòdul:Línia:

3 => 8  •  "AAAAAAAA"

4 => 10  •  "AAAAAAAAAA"

5 => 12  •  "AAAAAAAAAAAA".