1. В сообществе нашего форума Вконтакте создан раздел по продаже электронных компонентов.
    Каждый может продать в нем свои залежавшиеся детали. Подробности здесь.

Как настроить GDB для ARM в Sublime Text?

Тема в разделе "Средства разработки для AVR/PIC/ARM/ПЛИС", создана пользователем r44083, 26 сен 2015.

  1. r44083

    r44083 Живет здесь

    Сообщения:
    4
    Симпатии:
    2
    Сделал в Sublime Text 3 что-то похожее на IDE для ARM на основе arm-none-eabi-*, make, clang и ST-LINK_CLI. Теперь дело дошло для отладчика. Установил плагин SublimeGDB, (PATH для GDB уже прописан). Ниже привожу настройки только для SublimeGDB, которые указал в настройках проекта:
    "settings":
    {
    "sublimegdb_commandline": "arm-none-eabi-gdb --interpreter=mi ARM-test0.elf",
    "sublimegdb_workingdir": "${folder:${project_path:ARM-test0.elf}}"
    }

    Нажимаю в Sublime F5 и появляются вкладки плагина SublimeGDB:
    [​IMG]

    Вот лог вывода во вкладке "GDB Session":
    1-gdb-show interpreter
    =thread-group-added,id="i1"
    ~"GNU gdb (GNU Tools for ARM Embedded Processors) 7.8.0.20150604-cvs\n"
    ~"Copyright (C) 2014 Free Software Foundation, Inc.\n"
    ~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law. Type \"show copying\"\nand \"show warranty\" for details.\n"
    ~"This GDB was configured as \"--host=i686-w64-mingw32 --target=arm-none-eabi\".\nType \"show configuration\" for configuration details."
    ~"\nFor bug reporting instructions, please see:\n"
    ~"<http://www.gnu.org/software/gdb/bugs/>.\n"
    ~"Find the GDB manual and other documentation resources online at:\n<http://www.gnu.org/software/gdb/documentation/>.\n"
    ~"For help, type \"help\".\n"
    ~"Type \"apropos word\" to search for commands related to \"word\"...\n"
    ~"Reading symbols from ARM-test0.elf..."
    ~"done.\n"
    (gdb)
    1^error,msg="Undefined show command: \"interpreter\". Try \"help show\"."
    (gdb)
    2-inferior-tty-set c:\users\pc1\appdata\local\temp\tmpoh0opi
    2^done
    (gdb)
    3-gdb-set target-async 1
    4-gdb-set pagination off
    5-gdb-set disassembly-flavor intel
    6-break-insert "\"d:/4 electronics/soft/sublime text projects/arm-test0/user-code/main.cpp\":36"
    3^done
    (gdb)
    4^done
    (gdb)
    5^error,msg="No symbol \"disassembly\" in current context."
    (gdb)
    6^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x080002f4",func="main()",file=".\\user-code/main.cpp",fullname="D:\\4 electronics\\soft\\Sublime Text projects\\ARM-test0\\user-code\\main.cpp",line="36",thread-groups=["i1"],times="0",original-location="d:/4 electronics/soft/sublime text projects/arm-test0/user-code/main.cpp:36"}
    (gdb)
    7-exec-run
    7^error,msg="Don't know how to run. Try \"help target\"."
    (gdb)

    И на этом всё. "gdb_step_over" (F10), "gdb_step_into" (F11) и остальные команды не работают.
    Я подозреваю, что в строке GDB "5^error,msg="No symbol \"disassembly\" in current context." кроется ошибка в вызове GDB.
    Также интересует, можно ли будет просматривать в реальном времени регистры периферии с помощью GDB?
    Нашел скриншот в интернете с настроенным GDB для Sublime, всё должно выглядеть примерно так:
    [​IMG]
    Вот ссылка на сборку Sublime Text для ARM (она полностью портабельная для Windows): https://copy.com/kJIDxc8rIJenEWm4
    Вот ссылка на проект на гитхаб: https://github.com/r44083/ARM-test0

    Заранее спасибо за помощь.
    radioengineer нравится это.
     
    : arm, GCC, sublimetext, stm32, ide
  2. r44083

    r44083 Живет здесь

    Сообщения:
    4
    Симпатии:
    2
    У меня есть прогресс в этом вопросе:
    написал простой скрипт для openocd:

    telnet_port 4444
    gdb_port 3333
    source [find interface/stlink-v1.cfg]
    transport select hla_swd
    set WORKAREASIZE 0x2000
    source [find target/stm32f1x.cfg]
    reset_config srst_only

    При запуске openocd в папке проекта, в консоль выводится следующее:
    [​IMG]

    Когда я из Sublime Text запускаю отладку с помощью GDB, и в диалоге GDB пишу "target remote localhost:3333", то в консоли openocd появляется сообщение: "undefined debug reason 7 - target needs reset" и в консоли GDB появляется следующее:

    10target remote localhost:3333
    &"target remote localhost:3333\n"
    ~"Remote debugging using localhost:3333\n"
    =thread-group-started,id="i1",pid="42000"
    =thread-created,id="1",group-id="i1"
    ~"0x00000000 in ?? ()\n"
    *stopped,frame={addr="0x00000000",func="??",args=[]},thread-id="1",stopped-threads="all"
    11-thread-select 1
    10^done
    (gdb)
    12-stack-info-frame
    11^done,new-thread-id="1",frame={level="0",addr="0x00000000",func="??",args=[]}
    (gdb)
    12^done,frame={level="0",addr="0x00000000",func="??"}
    (gdb)
    13-stack-list-frames
    13^done,stack=[frame={level="0",addr="0x00000000",func="??"},frame={level="1",addr="0x00000000",func="??"}]
    (gdb)
    14-stack-list-arguments 1
    14^done,stack-args=[frame={level="0",args=[]},frame={level="1",args=[]}]
    (gdb)
    15-thread-info
    15^done,threads=[{id="1",target-id="Remote target",frame={level="0",addr="0x00000000",func="??",args=[]},state="stopped"}],current-thread-id="1"
    (gdb)
    16-thread-list-ids
    16^done,thread-ids={thread-id="1"},current-thread-id="1",number-of-threads="1"
    (gdb)
    17-stack-list-arguments 0 0 0
    17^done,stack-args=[frame={level="0",args=[]}]
    (gdb)
    18-stack-list-locals 0
    18^done,locals=[]
    (gdb)

    Но ходить по шагам или точкам останова не получается (в логе GDB возникает ошибка: "
    23-exec-next
    23^error,msg="Cannot find bounds of current function"
    (gdb)
    ") в окне дизассемблера (плагина SublimeGDB) по-прежнему ничего нет, и все регистры равны нулю:

    [​IMG]

    [​IMG]
  3. r44083

    r44083 Живет здесь

    Сообщения:
    4
    Симпатии:
    2
    Всё, разобрался. Спасибо
  4. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.552
    Симпатии:
    352
    Адрес:
    Алматы
    В итоге в чем проблема была, хочу тоже повторить проверить когда будет свободное время поразбираться?
  5. r44083

    r44083 Живет здесь

    Сообщения:
    4
    Симпатии:
    2
    Когда я запустил отладку, то программа уже была запущена, то есть нужно было или так поставить точку останова, или просто нажать на паузу. И всё - программа ходит по коду и всё такое.
    Вот фрагмент настроек проекта для GDB:
    Код:
        "settings":
        {
            "sublimegdb_workingdir": "${project_path:eek:ut/hex/}",
            "sublimegdb_commandline": "arm-none-eabi-gdb --interpreter=mi *.elf"
        }
    Где, ${project_path:eek:ut/hex/} - путь к папке в проекте, в которой лежит elf файл.
    Что бы отладчик начал нормально работать, надо после его запуска, в консоли GDB написать target remote localhost:3333
    Строка выше верна, если такой же порт задан в конфигурации openocd
    (этот форум распознал символы :eek: как смайлик)
    radioengineer нравится это.

Поделиться этой страницей