GDB + CLion + STM32 - 不会远程调试

GDB + CLion + STM32 - won't remote debug

我通读了 提供了很好的见解,但我遇到了一个稍微不同的问题:

我的环境:

在 GDB 远程调试配置面板中,我设置了:

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 暴力破解 'file' 但 gdbinit 似乎被忽略了

此外,它确实指示远程连接到st-util 运行,但我无法执行任何命令(断点、步进,暂停等) 除了终止 - 它似乎确实终止了它。

如果我直接从命令行使用 arm-none-eabi-gdb(/usr/bin/arm-none-eabi-gdb 已验证),一切正常,断点,步进等。此外,.elf 符号直接正确加载从命令行。

最后,如果我使用 GDB: Default (Bundled) 的配置,我不希望它运行良好,但它实际上更进一步并允许 pausing/resuming 的非常有限的功能(但绝对没有其他abilities)并且不抱怨符号

我有类似的设置(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=""

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

然后使用常用的调试命令,如 stepnextprint varbt 等。一切正常。

还应该提到我正在使用 libopencm3 in my firmware, so it also might have some influence over success of operation. I'd advice you to build and flash some simple example from libopencm3-examples (like this one),并尝试使用 GDB 对其进行调试。如果它有效,而您的代码不适用于 GDB,那么您可以轻松查找差异并找到问题。

参考资料

[1] Debugging details

[2]Using ST-LINK with st-util

升级到 CLion 2016.3.3 解决了这个问题。

我遇到了一些间歇性的 slowdown/connection 问题,但我不能确定这是 CLion 的问题。

感谢 Sam Protsenko 和 Eldar Abusalimov 在这方面的帮助。