Hardware Break points are the address values that you program to debug Unit when the configured value is matched with PC value or the address of the variable then it stops execution.
This has a limitation that we can have only few Break points (Depends on the number of registers available).
Software Breakpoints enables to place the Break point in the virtual memory locations also (if the code is not available in physical memory location)
Limitation here is :
Software break points can be placed over the instruction that are located in RW Memory.
*) Code execution is stopped, and the core functions are taken over by the debugger that uses the JTAG interface for communication.
*) Developer points to the instruction that should become breakpoint and instructs the debugger to convert it to the software breakpoint (e.g. pressing F11 while the desired instruction is being highlighted).
*)debugger replaces teh content of the highlighted program memory location with a special instruction that on attempt of execution causes the processor core to stop, This is detected by the debugger and signaled on the debugger window.
Hope I clear your doubt.