如何解决GDB意外的拆解名称?

问题描述 投票:0回答:1

当我尝试使用 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.
pi@raspbe

Linux机器上的编译版本:

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
c++ gdb cross-compiling
1个回答
0
投票

如何解决GDB意外的拆解名称?

投诉(这实际上是一个警告,表明其他东西以后可能不起作用)来自

gdb/cp-support.c
。您的版本似乎不知道如何处理
operator<=>()
,这是一个
C++20
功能。

您的GDB版本:13.1发布于2023-02-19;对于它不支持

<=>
,我并不感到非常惊讶。您应该尝试最新的 GDB(2024 年 9 月 29 日发布的 15.2),如果仍然出现问题,请在 GDB bugzilla 中提交错误。

或者您可以使用

-std=c++17
进行构建,而不使用宇宙飞船操作员。

附注我刚刚尝试了从当前 git 构建的 GDB,并且没有产生任何投诉。 这个补丁可能是这里的修复。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.