Index: debugger/gdbmidebugger.pp
===================================================================
--- debugger/gdbmidebugger.pp	(revision 21991)
+++ debugger/gdbmidebugger.pp	(working copy)
@@ -1650,6 +1650,40 @@
     then Result := Result + '''';
   end;
 
+  function GDBNicerStructure(const AInput: ansistring): ansistring;
+  const INDENTSTRING='  ';
+  var
+    Indent: ansistring;
+    i: Sizeint;
+    InStr: boolean;
+    Limit: SizeInt;
+  begin
+    Indent:=INDENTSTRING;
+    InStr:=false;
+    i:=3;
+    Limit:=Length(AInput);
+    Result:='';
+    for i:=1 to Limit do begin
+      Result:=Result+AInput[i];
+      if InStr then begin
+        InStr:=AInput[i]<>''''
+      end else begin
+        case AInput[i] of
+          '''': InStr:=true;
+          '{':  if (i<Limit) and (AInput[i+1]<>'}') then begin
+                  Indent:=Indent+INDENTSTRING;
+                  Result:=Result+LineEnding+Indent;
+                end;
+          '}':  if (i>0) and (AInput[i-1]<>'{') then
+                  delete(Indent,1,Length(INDENTSTRING));
+          ' ':  if (i>0) and (AInput[i-1] = ',') then
+                  Result:=Result+LineEnding+Indent;
+        end;
+      end;
+    end;
+  //  Result:=Result+AInput[length(AInput)];
+  end;
+
 var
   R: TGDBMIExecResult;
   S: String;
@@ -1739,14 +1773,24 @@
         then AResult := 'nil'
         else begin
           S := GetInstanceClassName(Addr);
-          if S = '' then S := '???';
-          AResult := S + ' ' + AResult;
+          if S = '' then begin
+            S := '???';
+            AResult := S + ' ' + AResult;
+          end else begin
+            AResult := S + ' ' + AResult;
+            GDBEvaluate(AExpression+'^',S);
+            AResult := AResult + ' ' + S;
+          end;
         end;
       end;
+      skRecord: begin
+        AResult:= 'Record type ' + ResultInfo.TypeName + ' '+ AResult;
+      end;
     end;
   finally
     ResultInfo.Free;
   end;
+  AResult:=GDBNicerStructure(AResult);
 end;
 
 function TGDBMIDebugger.GDBJumpTo(const ASource: String;
Index: debugger/gdbtypeinfo.pp
===================================================================
--- debugger/gdbtypeinfo.pp	(revision 21991)
+++ debugger/gdbtypeinfo.pp	(working copy)
@@ -559,7 +559,10 @@
     else if Pos(' = (', Line) > 0
     then DoEnum
     else if Pos(' = record', Line) > 0
-    then DoRecord
+    then begin
+      FTypeName := S;
+      DoRecord
+    end
     else begin
       FKind := skSimple;
       FTypeName := S;
Index: ide/debugmanager.pas
===================================================================
--- ide/debugmanager.pas	(revision 21991)
+++ ide/debugmanager.pas	(working copy)
@@ -1548,8 +1548,7 @@
 
   if SrcLine < 1
   then begin
-    ViewDebugDialog(ddtAssembler);
-
+(*
     if FDialogs[ddtAssembler] = nil
     then begin
       // TODO: change into assemblerview failure
@@ -1558,23 +1557,25 @@
           HexStr(ALocation.Address, FDebugger.TargetWidth div 4), #13,
           ALocation.FuncName, #13, ALocation.SrcFile, #13#13#13, #13]),
         mtInformation, [mbOK],0);
-
-      // jump to the deepest stack frame with debugging info
-      i:=0;
-      while (i < FDebugger.CallStack.Count) do
-      begin
-        StackEntry := FDebugger.CallStack.Entries[i];
-        if StackEntry.Line > 0
-        then begin
-          SrcLine := StackEntry.Line;
-          SrcFile := StackEntry.Source;
-          StackEntry.Current := True;
-          Break;
-        end;
-        Inc(i);
+    end; *)
+    // jump to the deepest stack frame with debugging info
+    i:=0;
+    while (i < FDebugger.CallStack.Count) do
+    begin
+      StackEntry := FDebugger.CallStack.Entries[i];
+      if StackEntry.Line > 0
+      then begin
+        SrcLine := StackEntry.Line;
+        SrcFile := StackEntry.Source;
+        StackEntry.Current := True;
+        Break;
       end;
-      if SrcLine < 1 then Exit;
+      Inc(i);
     end;
+    if SrcLine < 1 then begin
+      ViewDebugDialog(ddtAssembler);
+      Exit;
+    end;
   end;
 
   if FDialogs[ddtAssembler] <> nil
Index: lcl/include/hintwindow.inc
===================================================================
--- lcl/include/hintwindow.inc	(revision 21991)
+++ lcl/include/hintwindow.inc	(working copy)
@@ -115,7 +115,7 @@
   InflateRect(ARect, - 2 * HintBorderWidth, - 2 * HintBorderWidth);
   DrawText(Canvas.GetUpdatedHandle([csFontValid]),
            PChar(Caption), Length(Caption), ARect,
-           DT_NOPREFIX or DT_CENTER or DT_VCENTER or DT_WORDBREAK);
+           DT_NOPREFIX {*or DT_CENTER*} or DT_VCENTER or DT_WORDBREAK);
 end;
 
 class function THintWindow.GetControlClassDefaultSize: TPoint;
