I especially liked its variable search function. When you started the variable search you could choose whether you knew the value of the variable you were looking for or not. Then, at any time, you could pause the game and tell the game either what exact value the variable should have now or simply that it was the same, different, greater or lower than the previous value. The GameShark itself then kept track of all memory positions which matched those constraints. This made it really easy to find where in memory something was stored. Playing around with this little toy taught me a few valuable lessons in debugging.
The coolest thing I managed to pull off was playing the Single Player levels of Perfect Dark in Multiplayer. It took a while, since the current level wasn't stored in the same place for Single Player and Multiplayer. I seem to remember there being some difference in the level numbering, as well.