Hon na Rudý Říjen

Lovit tuhle chybu mi trvalo pár desítek minut. Ale dovedu si snadno představit i to, že by mi to trvalo dny…

Píšu wapovou aplikaci, kde je jedním z možných vstupů GPS souřadnice. Zadejte souřadnici v některém podporovaném formátu, klik a jede se dál. Parsování souřadnic není úplně jednoduché – není těžké ho napsat, ale je to i za použití regexpů docela pracné. A jednoho dne se mi v bugzille objeví chyba, která tvrdí, že souřadnice 50°5’7.74″N,14°26’­26.08″E jsou označeny za nekorektní.

  • Copy&paste souřadnic do aplikace. Opravdu to nefunguje.
  • Od oka ty souřadnice vypadají správně, ten formát bych měl spolehlivě parsovat.
  • Log čistý. Mám chuť si nastavit logování na podrobnější.
  • Mrknu do zdrojáků unittestů, opravdu je tam ověřováno parsování stejně naformátovaných souřadnic. Liší se jenom čísly.
  • OK, vyrobím si selhávající unittest. Copy&paste souřadnic do Eclipse.
  • Unittest v zelené. Takže se mi pokazí data někde cestou.
  • Cvičně si vezmu podobné souřadnice z unittestu a pastnu je do aplikace. Načteny.
  • Přepnout logy na DEBUG.
  • Nic zajímavého.
  • Takže kontrolní výpis někam na půl cesty mezi jsp a parser.
  • Kruci, nikde se nic nepokazilo.
  • A výpis do parseru.
  • Přišla stejná data, jako jsou v unittestu.
  • Někde něco očividně hnije.
  • Chvilka odreagování se na kompost.cz
  • Copy&paste souřadnic z bugzilly do aplikace. Opravdu to nefunguje.
  • Kouknu na zdrojáky unittestu, přidám jedeno failování, abych si byl jistý, že je kód opravdu zavolán.
  • Unittest poslušně selže. Sakra.
  • Copy&paste souřadnic z unittestu do aplikace. Ono to funguje!
  • Copy&paste souřadnic z bugzilly do aplikace. Nefunguje.
  • Copy&paste souřadnic z unittestu do aplikace. Funguje!
  • Copy&paste souřadnic z bugzilly do aplikace. Nefunguje.
  • Opsání souřadnic z bugzilly do aplikace. Funguje.
  • Grrrrrrrr.
  • Nyní již máte na této stránce dostatek indicií k tomu, abyste odhalili chybu. Pokud chcete rozuzlení, čtěte dál.
  • Copy&paste souřadnic z bugzilly do aplikace. Nefunguje. Log OK. Zkusím si maličko změnit formát, tohle stupnítko nahradím písmenkem D. A tohle minutítko emkem. A voila, co se to tu děje? Abych smazal minutítko, musím zmáčknout backspace dvakrát.
  • A už je to vlastně hotovo. Mrknu do zdrojáku stránky, ze které kopíruji, zda není uvnitř souřadnic nějaký whitechar. A je. Kdoví proč tam straší ­. Grrr.

Takže co se stalo? Když jsem z bugzilly kopíroval souřadice do své aplikace, byl v nich jeden skrytý znak navíc. Ale při vložení do JUnit testu v Eclipse někdo (nejspíš SWT, možná Carbon) ten paznak odstranil. To vysvětluje celé podivuhodné chování, které jsem při ladění pozoroval.

Pokud by měl mít příběh nějaké rozuzlení, tak je to: Ať ladíš, jak ladíš, stejně nakonec potřebuješ trochu štěstí a bystré oko.