public class JejakException {
    public static void main(String[] args) {
        String[] masukan = {"12", "abc", "7"};
        int jumlah = 0;

        for (String teks : masukan) {
            try {
                jumlah += parseAngka(teks);
            } catch (NumberFormatException e) {
                // Mensimulasikan exception breakpoint: jeda di titik lempar
                StackTraceElement lokasi = cariFrameKita(e);
                System.out.println("[exception-bp] berhenti di "
                        + lokasi.getMethodName()
                        + " baris " + lokasi.getLineNumber()
                        + " -> " + e.getMessage());
            }
        }

        System.out.println("Jumlah nilai valid: " + jumlah);
    }

    static int parseAngka(String teks) {
        return Integer.parseInt(teks);
    }

    // Ambil frame pertama milik kode kita sendiri, bukan pustaka java.lang
    static StackTraceElement cariFrameKita(NumberFormatException e) {
        for (StackTraceElement frame : e.getStackTrace()) {
            if (!frame.getClassName().startsWith("java.")) {
                return frame;
            }
        }
        return e.getStackTrace()[0];
    }
}
