GDB Monitor commands in CLion

前端 未结 2 541
感动是毒
感动是毒 2021-02-06 08:30

I\'m trying to debug an embedded project using remote GDB. My system:

  • Target: ARM Cortex M0.
  • SEGGER J-Link GDB Server V6.10 Command Line Version
2条回答
  •  野趣味
    野趣味 (楼主)
    2021-02-06 08:54

    CLion doesn't block any particular command from .gdbinit on purpose. The thing is, these commands are executed on the debugger startup, before attaching to the target. That means that the monitor reset command gets executed without a remote session being run yet, hence it fails.

    Just to clarify:

    • here's what happens when you execute GDB manually:

      # commands from .gdbinit
      target remote localhost:2331
      set verbose on
      file "/path_to_output_file/blinky.elf"
      monitor reset
      break main
      
    • here's what happens when you execute GDB from CLion with the same .gdbinit file:

      # commands from .gdbinit
      target remote localhost:2331
      set verbose on
      file "/path_to_output_file/blinky.elf"
      monitor reset
      break main
      
      # commands executed by CLion to attach
      target remote localhost:2331  # <- ERROR (A program is being debugged already)
      
    • and here's what's going on when you execute GDB from CLion with the attach command removed:

      # commands from .gdbinit
      set verbose on
      file "/path_to_output_file/blinky.elf"
      monitor reset  # <- ERROR not attached to remote gdbserver => unknown command
      
      # ... not executed due to the error above
      break main
      # commands executed by CLion to attach
      target remote localhost:2331
      

    The issues you linked are totally the right ones, please feel free to vote (disclaimer: I'm one of CLion developers). I couldn't come up with a reasonable workaround to suggest you for now, I'm afraid.

    Update:

    There actually is a workaround for your use case that works for both CLion and terminal debug sessions. You can use GDB hooks to achieve that.

    In your .gdbinit file replace the commands in question with the following lines:

    define target hookpost-remote
    file "/path_to_output_file/blinky.elf"
    monitor reset
    break main
    end
    

    This way, every time the remote target is connected, the GDB will execute the commands specified in the defined hook, regardless the way you start the debugger, either from CLion or from a terminal.

提交回复
热议问题