---
title: "debugging"
tags: 
- cosc202
---

removing technical faults
isolaing and remove technical faults
a human process
- requires creativity/disipline/knowledge
- deepr understanding of code

debuggers are tools to help debugging

## 1 common approaches
- temporarily add output of diagnostic info -> "printf" debugging
- permanently include calls to logging system -> route to terminal, log files etc

## 2 debugging machine code
- cpu runs code instruction by instruction
	- thus debugger can intervene between instructions
	- most cpus help debugger interrupt and resume programs
- cpu reached current code via a sequence of calls
	- called **stack trace** , aka back frame, stack frame etc
- may reach point where it cannot continue
	- e.g., integer division by zero, program execution must stop
	- stack trace of stopped program can be analysed

## 3 Imperative languages
These are languages that are executed in a step-wise, sequentail manner using the [imperative programming](notes/imperative-programming-language.md) paradigm
  
- debug symbols
	- e.g., method named, variable named
- source code context
	- line numbers
	- variable name
	- function method names

## 4 doing debugging
### 4.1 stepping skipping running
- step into --> steps one statement and steps into function calls
- step over --> a step that treats function calls as statement
- step out --> return to the instruction after the function call you're in
- continue  --> go back to running code continuously

### 4.2 controlling debugger execution
Can run normally --> debugger will run when program crashes

Breakpoint --> debugger will stop program when/if that line is reached
- conditional breakpoints only suspend if a condition is true

Watch point --> program is suspended when some data changes (e.g., variables)

## 5 debugging non imperative languages
e.g, spreadsheet (Dataflow programming)
- no breakpoints
- must step through _iterations of computations_

e.g., Equation
- break into smaller parts
- try 'compile' it in multiple ways

e.g., Data base query (declarative programming)
- -reexpressign the query and comaring can be useful
