我通过GDB Monitor commands in CLion阅读提供了很好的见解,但我的问题略有不同:
我的环境:
在GDB Remote Debug配置面板中,我设置了:
GDB: /usr/bin/arm-none-eabi-gdb
Symbol file: /home/malachi/temp/mbed_test/mbed-os-program/BUILD/NUCLEO_F401RE/GCC_ARM/mbed-os-program.elf
来自CLion,无论我做什么,我都会一直为控制台获取此信息:
Cannot configure GDB defaults: No symbol table is loaded. Use the "file" command.
Debugger connected to localhost:4242
我尝试使用.gdbinit强制'文件',但gdbinit似乎被忽略了
此外,它 表示与远程运行的st-util的连接,但我无法执行任何命令(断点,步进,暂停等)除外终止 - 似乎终止它。
如果我直接从命令行使用arm-none-eabi-gdb(/usr/bin/arm-none-eabi-gdb
已验证),则可以正常工作,断点,步进等。另外.elf符号直接从命令行加载。
最后,如果我使用GDB: Default (Bundled)
的配置,我不希望它运作良好,但它实际上进一步发展并允许暂停/恢复的功能非常有限(但绝对没有其他能力)并且不要抱怨符号
答案 0 :(得分:3)
我有类似的设置(除了CLion),我可以通过STM32F4DISCOVERY(其上有ST-LINK v2)调试我的STM32板。也许如果你按照我的指示,也会为你效劳。
首先,在构建固件时向GCC提供下一个标志:
# Debug flags
CFLAGS += -Os -g -fno-schedule-insns -fno-schedule-insns2
# Backtrace support
CFLAGS += -fno-omit-frame-pointer -funwind-tables
CFLAGS += -mapcs -mno-sched-prolog
LDFLAGS += -mapcs -mno-sched-prolog
使用下一个脚本启动GDB服务器。当然,必须安装st-util,因为该脚本使用它。
#!/bin/sh
CROSS_COMPILE=arm-none-eabi-
GDB=${CROSS_COMPILE}gdb
if [ $# -ne 1 ]; then
echo "Please provide elf-file for debug symbols" >&2
exit 1
fi
elf_file="$1"
echo '---> Starting GDB server...'
if [ -f gdb.pid ]; then
kill -9 $(cat gdb.pid)
rm -f gdb.pid
fi
st-util & echo $! >gdb.pid
echo '---> Starting GDB...'
$GDB -ex "target extended localhost:4242" $elf_file
kill -9 $(cat gdb.pid)
rm -f gdb.pid
将其另存为gdb.sh
并按此操作(一旦开启电路板):
$ ./gdb.sh your-firmware.elf
您会看到(gdb)
提示。现在您可以使用常用的GDB命令进行调试。就我而言,GDB向我展示(开始时):
GDB connected.
reset_handler () at ../../cm3/vector.c:68
68 for (src = &_data_loadaddr, dest = &_data;
所以我通常会这样做:
(gdb) break main
(gdb) continue
(gdb) list
然后使用常用的调试命令,例如step
,next
,print var
,bt
等。一切都按预期工作。
还应该提到我在我的固件中使用libopencm3,因此它也可能对操作成功产生一些影响。我建议你从libopencm3-examples(如this one)构建并刷新一些简单的例子,并尝试用GDB调试它。如果它有效,并且您的代码不能与GDB一起使用,那么您可以轻松查找差异并找到问题。
答案 1 :(得分:0)
升级到CLion 2016.3.3解决了这个问题。
我遇到了一些间歇性的减速/连接问题,但我无法确定这是一个CLion的事情。
感谢Sam Protsenko和Eldar Abusalimov的帮助。