[问题] gdb 印出 auto 成员函式回传值

楼主: KaryuuIssen (一闪)   2020-10-17 11:20:30
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
问题(Question):
最近除错时发现 gdb 好像无法解析 auto 的类别成员函式回传值
一律只会印出 void
而且有确定该函式没被优化掉
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
简单例子如下:
#include <cstdio>
struct S {
auto f1(int v) { return v; }
int f2(int v) { return v; }
};
auto f3(int v) { return v; }
int main() {
S s;
printf("%d %d %d\n", s.f1(1), s.f2(1), f3(1)); // 1 1 1
}
使用 gdb 印出如下:
(gdb) p s.f1(1)
$1 = void
(gdb) p s.f2(1)
$2 = 1
(gdb) p f3(1)
$3 = 1
从结果看来一般函式 f3() 用 auto 回传就没这个问题
有人知道原因吗?
作者: ucrxzero (RX-0)   2020-10-17 12:15:00
楼主: KaryuuIssen (一闪)   2020-10-17 12:26:00
GDB 7.7.1 跟SO上这个好像是不同问题
作者: ucrxzero (RX-0)   2020-10-17 13:21:00
感觉要用很脏的写法印出来按错等补推https://community.slickedit.com/index.php?topic=8641.0可以用-O0编吗 最不会有问题?https://i.imgur.com/E8qFr2J.png这是gdb evaluate function的过程我大胆猜测问题在create new stack那边毕竟全域不在stack里面所以全域的没问题好想知道为什么喔用print S::f1 却可以有int我今天有空帮你研究一下我用template却可以s.f1(123)=12311就有囉只是要配合decltype
作者: a1u1usul3 (Q-Max)   2020-10-19 17:05:00
随手试了一下,clang9编出来跑gdb是有推论出来的clang9编出来debug info直接就填int囉
作者: ucrxzero (RX-0)   2020-10-19 18:08:00
干打错

Links booklink

Contact Us: admin [ a t ] ucptt.com