W języku C++ wiem, że kompilator może inicjować statyczne obiekty w dowolnej kolejności, którą wybiera (z zastrzeżeniem kilku ograniczeń) i że ogólnie nie można wybrać ani określić statycznej kolejności inicjowania.Ustalić statyczną kolejność inicjalizacji po kompilacji?
Jednak po skompilowaniu programu kompilator musi podjąć decyzję o kolejności, w jakiej należy zainicjować te obiekty. Czy istnieje sposób określenia, z kompilowanego programu z symbolami debugowania, w jakiej kolejności statycznej zostaną nazwani konstruktorzy?
Kontekst jest następujący: Mam duży program, który nagle ulega uszkodzeniu przed głównym(), gdy jest zbudowany pod nowym łańcuchem narzędzi. Jest to albo problem ze statycznym porządkiem inicjowania, albo coś jest nie tak z jedną z ładowanych bibliotek. Jednak podczas debugowania za pomocą gdb lokalizacja awarii jest po prostu zgłaszana jako surowy adres bez żadnych symbolicznych informacji lub śledzenia wstecznego. Chciałbym zdecydować, który z tych dwóch problemów jest, umieszczając punkt przerwania na konstruktorze pierwszego zainicjowanego statycznie obiektu, ale nie wiem, jak określić, który to obiekt.
Czy próbowałeś rekompilować się z flagą "-g3"? To powinno zawierać wiele symboli debugowania, z którymi możesz pracować. –
Jest to łącznik, który określa ostateczne zamówienie we wszystkich jednostkach kompilacji. Wierzę, że g ++ ma pewne pragmy, które mogą pomóc w zdefiniowaniu porządku. –
Odpowiedź jest wysoce zależna od platformy i udało Ci się utrzymać swoją platformę w tajemnicy. Pokaż go, a także wersję GDB, z której korzystasz. –