This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Software breakpoints with J-Link probe

Hi,

I am not able to make software breakpoints working with a Segger J-Link probe.

As an exemple, here is my assert callback function:

void __attribute__((noreturn)) __assert_func(const char *file, int line, const char *func, const char *failedexpr) {
  asm volatile("bkpt");
  abort();
}

My program should be stopped automatically when entering any assert function. In general, I would like to stop the execution of my program using the asm volatile("bkpt") instruction.

Using an ST-Link v2 probe, the code above works. Unfortunately, it doesn't work with a Segger J-Link probe. Any experience with this ? Is any specific configuration require to make this working ?

Note: I use the latest available J-Link firmware "SEGGER J-Link Lite-Cortex-M V8.00" with SEGGER J-Link V5.12 software.

  • Hi metch, I haven't tested with GDB but testing on Keil show that Jlink worked fine. My function is like this:

    __asm void break_here(void)
    {
        bkpt #0x01
        mov pc, lr	
    }
    
  • Thanks @hungbui, unfortunately your code is not working with my setup. I will also try it with Keil. Maybe there is something wrong in my Eclipse / J-Link configuration. Any help is welcome.

  • Hi metch, Yes my code is for KEIL. On GCC, I assume it should be:

     static inline void break_here(void)
        {
            __asm volatile(
                "bkpt #0x01"           
                "mov pc, lr"      
              );
        }
    
  • Thanks @hungbui. ; are missing in your code ;)

    My problem is not a compilation issue. Is use the exact same code with the GNU GDB debugger and it works. With a J-Link Lite probe, I get the following messages:

    Read 4 bytes @ address 0x00023544 (Data = 0x46F7BE01)
    Starting target CPU...
    Read 4 bytes @ address 0x00023544 (Data = 0x46F7BE01)
    Starting target CPU...
    [etc...]
    

    The software breakpoint is not working with my setup unfortunately :(

    Update 2016/05/25:

    The following code can be used with GCC:

    static inline void break_here(void) {
      __asm volatile(
        "bkpt #0x01\n\t"
        "mov pc, lr\n\t"
      );
    }
    

    This code only works with my Segger J-Link lite probe and the Segger tools 5.10m. It doesn't work with the the latest Segger version5.12...

    Update 2016/07/08:

    The error has been reported to Segger and they fix the problem. GDB 7.10 changed something in the way breakpoints halt execution, and current SEGGER JLinkGDBServer had problems to correctly inform GDB about the BKPT.

    Software breakpoints work fine again from Segger tools version V5.12h. You should update the tools manually to the latest available version. You can download it from here: www.segger.com/.../jlink

  • I saw that you also posted a comment here. But what I understood is that the user who posted the thread managed to stop at the break point, but not able to continue, in your case it was that the debugger didn't stop.

Related