Let's say I'm debugging a program step by step and want to `Print` some expressions ([using ShowIt](http://stackoverflow.com/a/8270643/884752), for example).

Is there a way to output the result of `Print` on top of already printed expressions instead of at the bottom?

**EDIT**

For the record, this version of ShowIt is particularly useful, it can be used in conjunction with ReapTags defined here http://stackoverflow.com/a/6245166/884752. To see the list of keys defined in the debugSymbol containing the results extracted from a program you can use the function Keys defined in the same post or here http://mathematica.stackexchange.com/a/999/66. I've also incorporated the answer of Szabolcs into ShowIt and the answer of R.M. to the question http://mathematica.stackexchange.com/q/9072/66.

	ExtactSymbolName[str_String]:=
		With[{pat = WordCharacter},
		    StringReplace[str, (pat ... ~~ "`") .. ~~ s : pat .. ~~ ("$" ~~ NumberString) ... :> s]
		];

	SetAttributes[System`ShowIt, HoldAll];
	System`ShowIt[expr__] := System`ShowIt[{expr}];
	System`ShowIt[expr_] :=
	    With[{evaluatedExpr = expr},
	    	(*Message[Debug::ShowIt,Defer[expr = evaluatedExpr]];*)
	    	If[TrueQ@$ShowIt,
	     If[TrueQ@$ReverseIt,
	    			insertBelowEvaluationCell[Defer[expr = evaluatedExpr]];
	    			,
	        		Print[Defer[expr = evaluatedExpr]];
	    		];
	    	];
	    	
			If[TrueQ@$SowIt,
	    Sow[
		evaluatedExpr
		,
                (*we replace $xxx with "" for expressions involving Module variables*)
		            ExtactSymbolName[ToString@Unevaluated@expr]
				];
			];
	    	
	        evaluatedExpr
	    ]; 
	
	(*Debug::ShowIt = "`1`";*)
	SetAttributes[System`ShowItList, {HoldAll,Listable}];
	System`ShowItList[expr__]:=System`ShowItList[{expr}];
	System`ShowItList[expr_] := System`ShowIt[expr];

	SetAttributes[ReapTags,HoldFirst];
	ReapTags[expr_]:=
	   Module[{elements},
	      Reap[expr,_,(elements[#1]=If[Length@#2==1,First@#2,#2])&];
	      elements
	   ];

Example

    $ShowIt=True; $SowIt = True; $ReverseIt=False;
    debugResult = ReapTags[x={1,2};y=3;z=4;ShowIt@Mean@x;ShowIt@z;ShowItList[x,y];ShowItList@{x,y};];
    debugResult["Mean[x]"]
    debugResult["x"]
    debugResult["y"]
    debugResult["z"]

The argument of ReapTags can be any expression including the call to a function which is hard to split into simple pieces thus using Reap and Sow as underlying functions is useful in such case.