I've been doing quite a bit of work for my upcoming SQL University class next and in it is a Script Component. These are the ones that live inside of a Data Flow task, which means: "No Breakpoints!". What a pain that can be. I had red boxes being tossed up left and right. I knew I was getting errors, just not where. Then it dawned on me: send the output down the data flow! It was brilliantly simple. In my example I use the FileName column for this. I was debugging so I used whatever column was handy. I set the column equal to the output of the exception te.ToString().
Then to see the output, I simply connect a Data Viewer.
No need to build elaborate mechanisms like pop-up boxes.