# Thinking in Pine - Tricks and Tips of Debugging

Education

BINANCE:BTCUSDT   Bitcoin / TetherUS
Welcome to "Thinking in Pine" short video series on the topics of Pine Script.

Today's discussion point is debugging and tools that Pine script provide us to debug our programs.

🎲 Points Discussed
• Debugging using `plot` for numerical series values.
• Using Pine Logs to debug for cases where `plot` is not suitable

🎯 Example Program - Debugging using plot

```length = input.int(14, 'Length')
multiplier = input.float(4, 'Multiplier')

var dir = 1
var stopDistance = ta.atr(length) * multiplier
// Remove var to fix the first issue
// stopDistance = ta.atr(length) * multiplier

sellStopCurrent = close + stopDistance

var sellStop = sellStopCurrent

sellStop := dir < 0? math.min(sellStop, sellStopCurrent) : sellStopCurrent
// Use nz to overcome na issues with math.max/ math.min
// sellStop := dir < 0? math.min(nz(sellStop, sellStopCurrent), sellStopCurrent) : sellStopCurrent

dir := dir == 1 and close < buyStop? -1 : dir == -1 and close > sellStop ? 1 : dir

// Plot statements used for debugging. display is set to display.data_window as the debugging plots do not need to appear on the charts
plot(stopDistance, 'Stop Distance', color.purple, display = display.data_window)
plot(sellStopCurrent, 'sellStopCurrent', color.green, display = display.data_window)
plot(sellStop, 'sellStop', color.green, display = display.data_window)
plot(dir, 'Direction', color.white, display = display.data_window)

plot(dir > 0? buyStop : sellStop, 'Supertrend', dir > 0? color.red : color.green)```

🎯 Example Program - Pine Logs
```sum = 0
arr = array.new<float>()
for i = 0 to 10
sum+=i
// Log on every bar and also on every tick on real time
// log.info('Sum at iteration {0} is {1}', i, sum)

// Run only for the first bar
// if(barstate.isfirst)
//     log.info('Sum at iteration {0} is {1}', i, sum)

// Run on the last confirmed bar
// if(barstate.islastconfirmedhistory)
//     log.warning('Sum at iteration {0} is {1}', i, sum)

// if(barstate.isrealtime)
//     log.warning('Sum at iteration {0} is {1}', i, sum)

// Display only once
// varip showLog = true
// if(barstate.isrealtime and showLog)
//     log.warning('Sum at iteration {0} is {1}', i, sum)
//     if (i == 10)
//         showLog := false

// Extract through the array and log outside the loop
arr.push(sum)

// Log the extracted array on real time and print only once
varip showLog = true
if(barstate.isrealtime and showLog)
log.error('Sum at different iterations : {0}', arr)
showLog := false

plot(sum)```

🎲 References