What is the simplest way to determine which call to a superfunction has generated a Message?

I have a complicated function which contains many calls to NIntegrate, NSolve, FindRoot and other superfunctions in many places. My function is organized in such a way that every call to a superfunction is assigned to unique Blocked variable. Sometimes these functions produce Messages but it is not obvious which call has generated the message. I wish to find a straighforward way to know which call has generated the message. It would be great to include this information in the Message itself but just printing this information before/after the Message would be sufficient.

I know that there is undocumented function InternalHandlerBlock which seemingly can do such tasks but I do not know how to restrict it to handle only printed messages.

For example,

InternalHandlerBlock[{"Message",
If[MatchQ[#, Hold[_, True]], Print[#]] &},
NIntegrate[Cos[20000 x]/Sqrt[x], {x, 0, 1}]]


Produces many prints but only one of them corresponds to the actually printed one Message.

-
See the answers to this question, especially rcollyer's and Mr.Wizard's. You might be able to add a hook to the printed message to also display the function name –  rm -rf Aug 28 '12 at 19:38

Following R.M's suggestion, and shamelessly lifting code from the Wizard’s fine answer there, you can use Stack[] and get the following:

SetAttributes[withTaggedMsg, HoldAll]
withTaggedMsg[] :=
Function[,
InternalInheritedBlock[{MessagePacket}, Unprotect[MessagePacket];
MessagePacket[name__, BoxData[obj_, form_]] /; ! TrueQ[$tagMsg] := Block[{$tagMsg = True},
Identity@
MessagePacket[name,
BoxData[RowBox[{ToBoxes@
Style[Row[{"With stack", Stack[][[3 ;;]], Spacer[5]}, " "],
Black], obj}], form]]];
#], HoldAll]
`

-
Ah, I even upvoted Mr.Wizard's solution but completely forgot it! Thank you for pointing out. –  Alexey Popkov Aug 29 '12 at 2:30