I have been thinking about this recently. My thoughts are that you can add some logic to your autoloader to save everything that gets called to a log file (watching for duplicate entries)
Ideally, this could be something that you could turn on, go through your whole project, and then check the log file to see what's used and then turn it off. (For me this would mean it's only active if my application is in debug mode)
My solution is not so much to see what's defined at any certain point in execution, but more to keep track of your custom functions/libraries that needs to be included when uploading your project to a server. For example if you have a bunch of common libraries and you need to just to remember which ones to upload for a certain project. This might not be specifically what you're asking, but I thought it was close enough to your question to mention it.