You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决GDB读取符号时意外解混淆名称及调试信息异常问题

交叉编译程序GDB调试无法获取局部变量与行号问题

交叉编译的camera-bot程序在GDB调试时无法读取局部变量和行号,加载符号文件时触发大量unexpected demangled name错误,相关环境与输出信息如下:

GDB符号读取错误输出

(gdb) set complaints 10000
(gdb) file camera-bot
Reading symbols from camera-bot...
During symbol reading: unexpected demangled name 'operator<=><char, std::char_traits<char>, std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
During symbol reading: unexpected demangled name 'operator<=><long long, std::ratio<1ll, 1000ll>, long long, std::ratio<1ll, 1000ll> >(std::chrono::duration<long long, std::ratio<1ll, 1000ll> > const&, std::chrono::duration<long long, std::ratio<1ll, 1000ll> > const&)'
During symbol reading: unexpected demangled name 'operator<=><long long, std::ratio<1ll, 1000000ll>, long long, std::ratio<1ll, 1000000ll> >(std::chrono::duration<long long, std::ratio<1ll, 1000000ll> > const&, std::chrono::duration<long long, std::ratio<1ll, 1000000ll> > const&)'
During symbol reading: unexpected demangled name '((forward<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>)({parm#1}))<((forward<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>)({parm#2}))) std::less<void>::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
During symbol reading: unexpected demangled name 'decltype (((forward<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>)({parm#1}))<((forward<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>)({parm#2}))) std::less<void>::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
During symbol reading: unexpected demangled name 'operator<=><char*, std::vector<char, std::allocator<char> > >(__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > > const&, __gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > > const&)'
During symbol reading: unexpected demangled name '((forward<char const (&) [19]>)({parm#1}))<((forward<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>)({parm#2}))) std::less<void>::operator()<char const (&) [19], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(char const (&) [19], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
During symbol reading: unexpected demangled name 'decltype (((forward<char const (&) [19]>)({parm#1}))<((forward<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>)({parm#2}))) std::less<void>::operator()<char const (&) [19], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(char const (&) [19], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
During symbol reading: unexpected demangled name '((forward<char const (&) [18]>)({parm#1}))<((forward<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>)({parm#2}))) std::less<void>::operator()<char const (&) [18], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(char const (&) [18], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'

设备端GDB版本

pi@raspberrypi:~ $ gdb --version
GNU gdb (Raspbian 13.1-3) 13.1
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

交叉编译器版本

developer@e3d48b122fbf:/workspaces/RaspberryCamera$ /home/developer/opt/x-tools/armv6-rpi-linux-gnueabihf/bin/armv6-rpi-linux-gnueabihf-g++ --version
armv6-rpi-linux-gnueabihf-g++ (crosstool-NG UNKNOWN - tttapa/docker-arm-cross-toolchain:armv6-rpi) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

程序调试段信息

pi@raspberrypi:~ $ readelf -S camera-bot | grep -i debug
  [32] .debug_aranges    PROGBITS        00000000 37a088 001890 00      0   0  8
  [33] .debug_info       PROGBITS        00000000 37b918 2b3db9 00      0   0  1
  [34] .debug_abbrev     PROGBITS        00000000 62f6d1 02f1a8 00      0   0  1
  [35] .debug_line       PROGBITS        00000000 65e879 0e5d3d 00      0   0  1
  [36] .debug_frame      PROGBITS        00000000 7445b8 01df34 00      0   0  4
  [37] .debug_str        PROGBITS        00000000 7624ec 073658 01  MS  0   0  1
  [38] .debug_line_str   PROGBITS        00000000 7d5b44 0000f7 01  MS  0   0  1
  [39] .debug_loclists   PROGBITS        00000000 7d5c3b 11396d 00      0   0  1
  [40] .debug_rnglists   PROGBITS        00000000 8e95a8 01cf4a 00      0   0  1

问题分析与解决方法

  • 根本原因是GDB与交叉编译器版本不兼容:用GCC 14.2.0编译的程序,调试符号使用了新的格式(比如C++20三路比较运算符的符号命名),但设备端GDB 13.1无法正确解析这些符号,导致调试信息加载失败,无法获取局部变量和行号。
  • 可行解决路径:
    1. 升级设备端GDB到14.x版本,确保和编译器版本匹配。
    2. 编译时添加-gdwarf-4参数,强制生成DWARF 4格式的调试信息(GCC 14默认生成DWARF 5,GDB 13对DWARF 5的部分特性支持不完善)。
    3. 检查编译参数:确认已经添加-g/-g3生成调试信息,且没有使用-s等剥离调试信息的选项。

内容的提问来源于stack exchange,提问作者John Tracid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 06:08:09