繁体   English   中英

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

[英]GDB + CLion + STM32 - won't remote debug

我通读了CLion中的GDB Monitor命令,提供了很好的见解,但是我遇到了一个稍微不同的问题:

我的环境:

  • 目标:ARM Cortex M4(STM32F401RE)
  • ST-UTIL gdb服务器( https://github.com/texane/stlink
  • arm-none-eabi-gdb 7.7.1 + dfsg-5 + 8〜bpo8 + 1
  • CLion 2016.3.2内部版本#CL-163.10154.43
  • Debian 8

在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,无论我做什么,我都会始终如一地为Console获得此信息:

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)配置GDB: Default (Bundled)我希望它不会运行良好,但实际上它会进一步发展,并且允许暂停/继续的功能非常有限(但绝对没有其他功能),并且不会抱怨关于符号

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

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

还应该提到的是,我在固件中使用的是libopencm3 ,因此它也可能对操作成功产生某些影响。 我建议您从libopencm3-examples中构建并刷新一些简单的示例 (如 示例 ),然后尝试使用GDB对其进行调试。 如果可行,并且您的代码不适用于GDB,则可以轻松查找差异并查找问题。

参考

[1] 调试细节

[2] 将ST-LINK与st-util一起使用

升级到CLion 2016.3.3可解决此问题。

我遇到一些间歇性的减速/连接问题,但我不能确定这是CLion的事情。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM