The easiest way we've found is to use the 'show neighbor' command. If you see the switch you're connected to on more than 1 port (excluding ports associated with lags), you know you have a loop with one of those ports.
For an instance where you don't have CDP available, it gets a little more difficult. We recently had a customer that had a loop on a commodity switch that was connected to an Enterasys Stack causing a broadcast storm in their network. The CPU utilization for the switch stacks on the subnet was at 70+%. We looked at the port statistics in NetSight Console. We looked at the port (non-uplink port between stacks) with the highest non-unicast packet in count, and disabled that port. We noticed the CPU utilization drop to normal levels almost immediately. For us, we got the problem port on the first shot. It may take a little trial and error, but I think you'll be able to find a loop with this method if CDP is not available.