Thanks for the link - sorry I've not come back to this I've just bought a mac so I've been a bit focussed on getting that set up with Lazarus (which was easy and the results are brilliant).
I've had a bit of luck stabilising the debugger by fiddling with the options... for some reason I had -gh (heaptrc for memleaks) and -pg (gprof) on. I've noticed for a while that the memleak report was always showing 0 even if I tried to deliberately cause a leak so I was fiddling around with these settings. Long story short, memleak reporting is now working and the debugger can step on but it still crashes after hovering over (almost) any value.
I tried removing all of my watches and hiding the local vars window but it didn't help. My code's heavily instrumented so I'm kind of getting away with it at the moment. Also, I'm building on Linux, Win and Mac so I've got a choice of platforms to play with.
I had a theory it could be do to with my code somehow so I created the following test app which causes the crash after hovering over OpenDialog1.FileName (hovering over "blah" is ok):
procedure TForm1.Button1Click(Sender : TObject);
var blah : string;
begin
blah := 'hello';
OpenDialog1.Execute;
if OpenDialog1.FileName = blah then
Exit;
end;
Full log for the session attached.