A generic and reflective debugging architecture to support runtime visibility and traceability of aspects