コンパイルエラーはコンパイル時に出力されたエラー文から判断
実行時エラーは、エラー文もそうだけどPrintStringを間に挟んで引数の値がどうなってるのかを追ったりする
ブレークはデバッグ機能だからエラーとは違う
ある変数にオブジェクトを代入していて、その変数をある関数の引数として渡したときに実行時エラーになった
とかなら、なぜ変数に代入されていないのかとかは、どこまで処理されてるのか確認するためにブレークを張ったりする

ケースバイケースなのでその時々でとる手段は違うよ
データが腐ってるかもしれない可能性があるなら別のデータを食わせたりもするしね