Einige nützliche Informationen existieren in der Binärdatei, weil GDB nützlichere Namen für Lambda-Funktionen z.
(gdb) bt
#0 <lambda()>::operator()(void) const (__closure=0x7fffffffd5ef) at ll.cc:3
#1 0x00000000004005e7 in main() at ll.cc:3
(obwohl vielleicht die Debug-Informationen sagt nur ein Verschlusstyp es ist, wie GDB alle Funktionen wie <lambda()>::operator()
zeigt) mit einem Verschlusstyp instanziiert
Der verstümmelte Name einer Vorlage zum Beispiel einen eindeutigen Namen enthält
#3 0x0000000000400712 in func<main()::<lambda()> >(<lambda()>) (t=...) at l.cc:4
aber vielleicht wird der Name nur verwendet, wenn es in anderen verfälschten Namen benötigt wird.
Mit GCC Sie können auch operator()
API Python Verwenden von GDB die vordefinierte Variable __PRETTY_FUNCTION__
, die wie main()::<lambda()>
etwas zeigt aus dem Namen der Schließung des Druck
durch Drucken Ich kann noch einen anderen Namen für die gleiche Schließung erhalten, z.B
(gdb) python import gdb; print gdb.block_for_pc(0x8048591).function.name
__lambda0::operator()() const
Das sind also mindestens drei verschiedene Namen! Also ich denke, es ist vielleicht eine Einschränkung von backtrace_symbols_fd
, dass es Namen für die Lambda-Funktionen nicht finden kann.
Es ist wahrscheinlich nützlich zu erwähnen, in welchem Kontext (Debugger? Toolchain?) Sie dies sehen möchten. – MSalters
Ja, welchen Compiler und Debugger benutzen Sie? – LThode
@MSalters erledigt, danke –