diff --git a/IPython/core/debugger.py b/IPython/core/debugger.py
index e3834fc..54074ca 100644
--- a/IPython/core/debugger.py
+++ b/IPython/core/debugger.py
@@ -290,7 +290,7 @@ class Pdb(OldPdb):
 
     def hidden_frames(self, stack):
         """
-        Given an index in the stack return wether it should be skipped.
+        Given an index in the stack return whether it should be skipped.
 
         This is used in up/down and where to skip frames.
         """
@@ -713,7 +713,9 @@ class Pdb(OldPdb):
                     break
             else:
                 # if no break occured.
-                self.error("all frames above hidden")
+                self.error(
+                    "all frames above hidden, use `skip_hidden False` to get get into those."
+                )
                 return
 
             Colors = self.color_scheme_table.active_colors
@@ -756,7 +758,9 @@ class Pdb(OldPdb):
                 if counter >= count:
                     break
             else:
-                self.error("all frames bellow hidden")
+                self.error(
+                    "all frames bellow hidden, use `skip_hidden False` to get get into those."
+                )
                 return
 
             Colors = self.color_scheme_table.active_colors
diff --git a/IPython/core/ultratb.py b/IPython/core/ultratb.py
index 2832c4e..beed8c0 100644
--- a/IPython/core/ultratb.py
+++ b/IPython/core/ultratb.py
@@ -699,9 +699,10 @@ class VerboseTB(TBTools):
 
         frames = []
         skipped = 0
-        for r in records:
+        lastrecord = len(records) - 1
+        for i, r in enumerate(records):
             if not isinstance(r, stack_data.RepeatedFrames) and self.skip_hidden:
-                if r.frame.f_locals.get("__tracebackhide__", 0):
+                if r.frame.f_locals.get("__tracebackhide__", 0) and i != lastrecord:
                     skipped += 1
                     continue
             if skipped: