For a long time, I couldn't use Charles to proxy iPhone traffic on my office MacBook. I check and recheck everything was setup correctly, but network traffic just don't show up in Charles. I can only use iOS Simulator to debug network traffic, it's really frustrating sometimes.
Finally, I got the time to figure out the reason. I had McAfee installed in my office computer. At some point I turned on the firewall accidentally, which blocked all incoming connections. Turned off the firewall, Charles started to work like a charm.