Where can i see my BitCoin addresses? How can i see all my BitCoin addresses?

Background

If i send a payment to someone (e.g. 0.35 BTC), the BitCoin protocol is unable to send just 0.35 BTC to someone. For example, if i own 1 BTC, and want to spend 0.35 BTC, then a transaction is created so send my entire 1 BTC to two different people:


0.35 BTC to [destination addresses]
remaining 0.65 BTC to [an new randomly generated address that i own]


This was horribly confusing thing to me, and nearly everyone else. Most people assume that if they backup their public and private key, that they have backed up their wallet.

Unfortunately, you do not have just the one address that appears in BitCoin-qt, you own n secret addresses, that are not visible in your wallet.

A Concrete Example

Lets take a real transaction from the blockchain:


Source Address
 18888888PPJ8oGeqR6AKmoiKUme9da48Xf: 2.3899 BTC
Destination Addresses
 1FvLq2vz7neRJeLk1uXGjg1Jk8FCiaHnwk: 2 BTC
 18888888PPJ8oGeqR6AKmoiKUme9da48Xf: 0.3898 BTC


Out there is a guy who owns address 18888888PPJ8oGeqR6AKmoiKUme9da48Xf (which had a balance of 2.3899 BTC). He then spent 2 BTC on something. The "change" is then routed back to a new address inside his client (18888888PPJ8oGeqR6AKmoiKUme9da48Xf)

You never see this address

The problem is that now you own another address; another randomly generated public/private key pair. If you lost your wallet right now, and restored from a backup, you would not have access to that change, because you don't have the key pair for this new, secret, hidden, address.

You only backup the key pair for your single "real" address. With every transaction BitCoinQt creates internal, secret, invisible addresses. They are hidden inside your wallet. 

i want to backup all my public-private key pairs to paper. But before i reach that point, i want to be see all my public-private key pairs. i need to see all my addresses.

How can i see all my BitCoin addresses?

BitCoinQt: v0.8.1-beta

Alternatively, in order to ensure the security of my BitCoins, after every transaction should i generate a transaction 


From: me
To: me


so that all my coins end up in a "real" address, which i can then backup? Is that something that is a best practice.

Losing BitCoins because my money was sitting in secret addresses was...depressing.

Bonus Chatter

From the BitCoin wiki entry for Change:


  The wallet file contains the private keys for change addresses, and they can receive and send coins normally. However, the GUI in the default client does not display them in the address book.


Also note: i'm not talking about backing up to a wallet.dat file. That will backup my wallet, but to a file. i have a backup of my single address; which is insufficient because my single address no longer has any bitcoins.
You can use pywallet to look at all the addresses and keys.

The console command listaddressgroupings should also give you all your addresses, grouped by known co-ownership. You can then use dumpprivkey to get the corresponding key.

However, backing up just specific keys is not a recommend practice, you should back up the wallet file. If you do want a more concise method, you should use a client that supports deterministic wallets.