Pewne przydatne informacje istnieją w pliku binarnym, ponieważ GDB może pokazywać więcej przydatnych nazw dla funkcji lambda, np.
(gdb) bt
#0 <lambda()>::operator()(void) const (__closure=0x7fffffffd5ef) at ll.cc:3
#1 0x00000000004005e7 in main() at ll.cc:3
(chociaż może info debugowania po prostu mówi, że to rodzaj zamknięcia, jak GDB pokazuje wszystkie takie funkcje jak <lambda()>::operator()
)
zniekształcone nazwisko szablon tworzony z rodzaju zamknięcie zawiera unikalną nazwę np
#3 0x0000000000400712 in func<main()::<lambda()> >(<lambda()>) (t=...) at l.cc:4
, ale może ta nazwa jest używana tylko wtedy, gdy jest potrzebna w innych zniekształconych nazwach.
z GCC można również wydrukować imię zamknięcie na operator()
drukując wstępnie zdefiniowana zmienna __PRETTY_FUNCTION__
, która pokazuje coś takiego main()::<lambda()>
Korzystanie GDB jest Python API mogę dostać kolejną nazwę dla tego samego zamknięcia, na przykład
(gdb) python import gdb; print gdb.block_for_pc(0x8048591).function.name
__lambda0::operator()() const
To co najmniej trzy różne imiona! Myślę więc, że to może być ograniczenie backtrace_symbols_fd
, że nie może znaleźć nazw dla funkcji lambda.
Prawdopodobnie warto wspomnieć, w jakim kontekście (debugger? Toolchain?), Który chcesz zobaczyć. – MSalters
Tak, jakiego kompilatora i debuggera używasz? – LThode
@MSalters done, thanks –