Debugging complex applications