There may be a few more steps... Just to confirm it all, please check:
1. make sure in your "Link Order" project tab for the target you are building that console_io_cf.c is listed. Just because it is in the "Files" tab (which is for all targets) does not mean it is in the "Link Order" tab for your particular target.
2. make sure in the target settings for your particular target, under Language Settings -> C/C++ Preprocessor, that you see "#define CONSOLE_IO_SUPPORT 1".
3. then go to Debugger -> CF Exceptions and make sure "46 Trap #14 for Console I/O" is checked in two places.
4. make sure that your trap #14 handler executes a halt instruction, followed by an rte. You can confirm this by single stepping into the trap #14 that is in TRKAccessFile(). If you are using the default exceptions.c, this is taken care of by these lines:
#if CONSOLE_IO_SUPPORT
TrapHandler_printf, /* 46 (0x0B8) TRAP #14 */
#else
asm_exception_handler, /* 46 (0x0B8) TRAP #14 */
#endif
But you should confirm this with the single-step since the VBR gets potentially copied, modified, etc., and the halt/rte is required for the debugger console printf to work.
What processor are you using?
What I'm telling you works for the 522xx family, at least.
-- Rich