canonic(): This used to be equivalent to str() but that caused too
much breakage (esp. in JPython which holds absolute path names in
co_filename already).  This implementation uses os.path.abspath() as a
slightly better way to canonicalize path names.  It implements a
cache.
diff --git a/Lib/bdb.py b/Lib/bdb.py
index abfb7de..89908fc 100644
--- a/Lib/bdb.py
+++ b/Lib/bdb.py
@@ -1,6 +1,7 @@
 # Debugger basics
 
 import sys
+import os
 import types
 
 BdbQuit = 'bdb.BdbQuit' # Exception to give up completely
@@ -17,12 +18,14 @@
 
 	def __init__(self):
 		self.breaks = {}
-		# We want to have a method self.canonic() which
-		# canonicalizes filenames before comparing them
-		# but we want the default to be a very fast no-op.
-		# Solution: the built-in str function.
-		if not hasattr(self, "canonic"):
-			self.canonic = str
+		self.fncache = {}
+
+	def canonic(self, filename):
+		canonic = self.fncache.get(filename)
+		if not canonic:
+			canonic = os.path.abspath(filename)
+			self.fncache[filename] = canonic
+		return canonic
 	
 	def reset(self):
 		import linecache