Difference between ITM and ETM and why we go for ETM

Recently, I came to know about ETM(Embedded Trace Macrocell). This is to trace instruction of program to know the bugs.
The same can be achieved by ITM(Instrumentation Trace Macrocell) by using printf() statement.We can know the bugs by using ITM also. This is not using any controller ports.

Then what is the importance of ETM? Can anyone tell? I couldn't understand it. Debuggers with ETM are higher in cost. What's the purpose of that?