advanced debugging techniques