Mam zrzut główny i patrzę na zrzut główny z gdb.Jak mogę zobaczyć wartość boost :: any, jeśli znam typ z gdb
Zastanawiam się, czy istnieje sposób, aby móc zbadać wartość boost :: jakąś wartość w gdb?
W rdzeniu miałem adres do wzmocnienia, więc próbowałem rzucić go na symbol zastępczy, aby sprawdzić, czy mogę sprawdzić wartość, ale nie udało mi się. Wiem, że typ boostu jest niepodpisany długo, więc czy istnieje sposób na zobaczenie jakiejkolwiek wartości znającej typ?
(gdb) print ('boost::any::placeholder')(*(('boost::any'*)0x00007f263fa27730).content)
warning: can't find linker symbol for virtual table for `boost::any::placeholder' value
warning: found `boost::any::holder<bool>::~holder()' instead
$129 = warning: can't find linker symbol for virtual table for `boost::any::placeholder' value
warning: found `boost::any::holder<bool>::~holder()' instead
warning: can't find linker symbol for virtual table for `boost::any::placeholder' value
warning: found `boost::any::holder<bool>::~holder()' instead
{
_vptr.placeholder = 0x7f2a9a662560
}
Każda pomoc w tej sprawie byłaby bardzo doceniana. Dzięki!
Czy przyjrzeliście się boostowi z dowolnego źródła? Podsumowanie doładowania zawiera wskaźnik do posiadacza, którego typ dziecka jest szablonem na typie trzymanym, jeśli dobrze pamiętam. Samowolne zwiększenie nie jest typem dynamicznym, posiada typ dynamiczny. – Yakk
Zastanawiam się, czy można napisać ładną drukarkę gdb dla 'boost :: any'. W końcu nie musisz nawet znać typu zawartości, ponieważ wskaźnik 'vtable' przechowywanego typu wie, jaki jest typ zawartości. Potrzebujemy więcej ładnych drukarek gdb! – enobayram