Understanding and subsequently fine-tuning concurrent object-oriented programs may be difficult. To alleviate this situation, program visualization can be used. This research focuses on the question of what and how such visualization can be done for concurrent object-oriented systems. Furthermore, in the absence of language support, to what extent such visualization can be realized. To investigate these issues, Visor++, a tool for visualizing CC++ programs, is developed. This research proposes that both static and dynamic views of programs are important. However, many languages, including CC++, do not provide adequate support for program visualization. CC++, in particular, provides rudimentary support which is available only in the low-level run-time system. Therefore, proper support must be facilitated by Visor++. To make such support portable and maintainable, it is provided at the CC++ source-code level. Although some information, such as changes in variable and data structure values, cannot be easily captured by such an approach, experiments with Visor++ have shown that the information obtained can be of valuable assistance for understanding and fine-tuning programs.