Path: utzoo!utgpu!news-server.csri.toronto.edu!rutgers!ucsd!ucbvax!parc.xerox.com!kahn From: kahn@parc.xerox.com (Ken Kahn) Newsgroups: comp.sys.transputer Subject: Debugging dereference cycles Message-ID: <9007112143.AA02975@dumbo.parc.xerox.com> Date: 11 Jul 90 21:43:42 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The Internet Lines: 19 Yesterday I spent over 3 hours tracking down a bug that was due to the fact that I managed to create a variable that was bound to itself. It is very hard to debug such programs. I used the raw trace package (it produced a 1.5 MegaByte file) and lots of print statements and it still was very hard to localize once I suspected what the problem is. I think the Strand implementation is doing the "right" thing since any alternative that I can imagine would slow things down. What I would like to see, however, is a Strand implemenation that had a "development mode" -- a generalization of the current "resolvent" mode. When developing code I would like the implementation of X := Y to dereference both X and Y and check if they are the same before doing the assignment and if they are the same signal an error. I would like it to also do an occur check if Y is a tuple. Maybe people on this list can think up other things that would be useful while debugging code. -ken kahn