Debugging for Fun and Profit

I tend to call any troubleshooting process "debugging." A week or so ago I debugged our lawnmower when it wouldn't start. Today I spent a lot of time (unsuccessfully) debugging a mysterious apache child crash related to a php application. Tomorrow I will undoubtedly debug some software at work and some other things in "real life."

I would guess that roughly 40% of my life as a professional programmer and system administrator has been spent debugging. By that I don't mean to imply that I only write broken code (although I probably do); what I mean is that like most writing is rewriting, most programming is debugging. A first attempt at solving a problem rarely works correctly. If it was that easy to solve it must not have been much of a problem in the first place right?

For me debugging software/hardware/whatever is mostly about thinking of the most common things that could be causing the malfunction and then systematically proving that these things are or are not the cause of the current problem. When my dad taught me how to keep our crusty old lawnmower running when I was a kid he gave me the checklist "fuel, fire, air." This magic formula has pointed to the cause of 90% of the problems I have ever had with engines.

  • Does it have gas in the tank?
  • Is the gas getting to the cylinders?
  • Is the battery/magneto/alternator working?
  • Is the charge making it past the points/distributor?
  • Is the spark plug fouled?
  • Is the air filter clogged?
  • Is the choke stuck closed?

The order here is important too. On each branch of the decision tree we start at one end of the subsystem and walk towards the other end checking the key weaknesses in between. The branches are also arranged in order of most frequent failure. All this ordering hopefully get you to the root problem earlier rather than latter. You need to tailor the tree based on prior experience. When working with the beater Datsun I drove in college, fire came before fuel because it had constant alternator and distributor problems.

Software debugging works just like the mechanical troubleshooting process for a malfunctioning engine. The only difference is the decision tree. If I'm working on a network connectivity problem the quick checklist usually goes something like "interface, firewall, routing."

  • Is the physical link in place?
  • Is the interface active?
  • Is there a local firewall block?
  • Is there an upstream firewall block?
  • Is there an outbound route?
  • Is there an outbound route from the next hop?

Just like the lawnmower to car differences, this list gets modified based on what I'm working on. This order worked best for border connectivity issues on the frame relay networks I used to work with. The network I'm on today calls for the firewall checking first because 50% of the time that's where the problem is.

So how do you construct this sort of list when you run into a problem you've never seen before? I tend to use first principles or cartesian doubt technique. Based on the nature of the failure you are seeing and the knowledge you have of the system, think of everything that could have gone wrong. Start with a likely cause and follow it out until you are satisfied that particular subsystem is working. Move on to the next and repeat. If the problem is in code that you (or someone you know) wrote think about the things that are typical problems in your code. Do you often make fencepost errors? Are you working in a language that is prone to API mistakes like calling a method with the arguments in the wrong order? Are you working in a threaded environment and experiencing a concurrency issue?

I wish I had something better to say at the end of all this, but maybe some part of it is non-obvious: think about what could be broken, verify that it's not broken, repeat. Sounds pretty simple when I put it like that, but there's some magic in there that I can't quite elucidate.

What I Read On My Summer (OK Spring) Vacation

There's no central theme, but it turned out that there were a lot of books dealing with themes of computer and human intelligence. There was also a lot of just plain good reading and a handful of crazy crackpot tinfoil hat thrown in for good measure.

The Stephenson novels were re-reads of two of my all time favorite books. I'd love to work on a project to make something like the Young Lady's Illustrated Primer.

Mystery IP Address

A couple of months ago Steve noticed a lot of hits to the new company website from three IP addresses in the 38/8 block. By a lot of hits I mean something like 75% of the total traffic. The MaxMind database we use to generate region and ISP information for the traffic reports said that these addresses belonged to "Performance Systems International". Steve googled for this company and came up with a whole lot of blog and forum posts that claimed this company was home to a rogue bot that has plagued a lot of people.

I decide to dig a little deeper because most of the links that Steve sent me seemed to be a little under informed. Here's what I found:

"Performance Systems International" is the original name of PSINet which was an early tier 1 ISP. PSINet was eventually acquired by Cogent. Cogent currently owns the 38/8 ip space.

Apparently Cogent hasn't done a swip mapping for the particular addresses: 38.98.136.241, 38.98.136.242, 38.98.136.243 that the bot is coming from. Cogent does however run their own rwhois server that records the sub network assignment:

$ whois -h rwhois.cogentco.com -p 4321 38.98.136.241
%rwhois V-1.5:0010b0:00 rwhois.cogentco.com
38.98.136.241
network:ID:NET-266288E01B
network:Network-Name:NET-266288E01B
network:IP-Network:38.98.136.224/27
network:Org-Name:Ambiron, LLC
network:Street-Address:120 N LaSalle St Ste. 1250
network:City:Chicago
network:State:IL
network:Postal-Code:60602
network:Tech-Contact:ZC108-ARIN
network:Updated:2007-09-18 17:09:29
network:Updated-by:jknowles

This shows that the network block is assigned to "Ambiron, LLC". More googling leads to a press release on the Trustwave website announcing that in March of 2005 Trustwave and Ambiron merged. So the hits are coming from ips addresses owned by the company that is performing our PCI DSS security scans.

Nothing to see here folks. :)

I'm NOT turning into a Republican

Once you start down the dark path, forever will it dominate your destiny.

Yoda

So I was standing in line at the grocery store today waiting to buy some goodies for dinner. The customer in front of me had a huge cart of what I would mostly consider junk food: 4 half racks of soda pop, case of cup 'o noodles, sugary cereal, and a lot of frozen meal stuff. She's got some serious ink on her arms, bleached and teased hair and designer sunglasses. The clerk comments on her fancy french nails and the lady beams and explains how they took two and half hours to do. The total for her cart full of crap is $180. Scratch that, $169 and change because she's paying with her food stamp debit card.

For a moment (that I'm extending now because I'm taking the time to write about it), I was completely pissed off. The thing that set me off here wasn't that the lady obviously had money and time to put into her appearance while still on public assistance; it was the things that she was buying with "our" money. It's shallow and judgmental and in many ways none of my business, but it still rubs me the wrong way. Jones Soda and Sugar Smacks are not the building blocks of a healthy society.

Canada Two: The Revenge

If things go according to plan, my youngest brother will take over Canada sometime in the next two decades. Details are a little sketchy as to whether this will be the result a bloody revolution or if he will be welcomed with open arms following a massive ingestion of tainted poutine. The means of his ascension really doesn't matter; we know that it will happen eventually.

Once he takes power the basic plan it to set up a utopian society; a socialist meritocracy guided by a benevolent dictator. The first order of business will be to build a large wall to separate Canada II from the normals in the rest of the world. Then everyone wishing to remain inside the wall will have to take an intelligence test. Those who do not meet a minimum requirement will be ejected from the country by means of a large trebuchet. All future applicants for citizenship will be subject to the same test and penalty for failure.

The benevolent dictator part will be ensured via a lottery system. Every 24 months a call for applicants for the office of High Poobah will be made. Anyone who applies will be ejected via the trebuchet. Everyone left will be assigned to the lottery pool and the (un)lucky winner will be declared dictator for life. Obviously they will have to make the best of the two years left to them.

My only concern with the plan, other than hoping that I pass the entrance exam, is that Canada is a long way from the South Pacific. I'm going to be very torn between my dream of subsistence level farming in the tropics and hanging out with Adam.