Witam.
Generalnie jeżeli chodzi o GDB, to kiedyś działał bez zarzutu, teraz działa tylko w pewnych sytuacjach. Kiedy ustawie breakpointa na poszczególnych funkcjach dosłownie się "zawiesza". I przez "zawiesza się" mam na myśli to co napisałem w tytule tego wątku. To znaczy - GDB jako proces mogę tylko zabić z poziomu menadzera zadań (ksysguarda w moim przypadku, bo siedze na linuxie). Utrzymuje swoje zużcie procesora na 16-17%,ntach, i dostep do aplikacji odzyskuje tylko kiedy zabije gdb.
W wielu sytuacjach kiedy ustawiam breakpointa, wszystko jest ok, ale zauważyłem że kiedy ustawiam breakpoint na funkcjach renderujących różne grafiki, to w wielu przypadkach następuje ta sytuacja z freezem. Teraz dla testów ustawiłem breakpoint na funkcji RenderSprite(), za każdym razem mi na niej freezuje. Wiem, że znalazłbym też wiele podobnych funkcji.
Nie mam pojęcia jak to zdiagnozować, gdb jak freezuje to się zachowuje tak, jakby był w pętli nieskończonej, nie da się nic z nim zrobić, można go jedynie zabić.
Miał ktoś do czynienia z podobną sytuacją?
Wrzucam logi z gdb które znalazłem w /tmp/
Widać tam troche ścieżek do moich plików, i nazw różnych funkcji... ale chyba to przeżyje (http://pastebin.com/zW9fBANR)
wersja gdb - GNU gdb (Ubuntu 7.8-1ubuntu4) 7.8.0.20141001-cvs
Dodam, że debuguje w netbeansie.
EDIT: Tak generalnie wygląda callstack wywołania tej funkcji:
Core::Core() ->
Core::Loop() ->
Graphics::DrawLoop() ->
Game::renderObjects() ->
Building::Render() -> (ta funkcja jest konkretyzowana w klasach Building, Ship dziedziczace po Entity)
EntityRender::RenderSprite() (Building dziedziczy po Entity, Entity dziedziczy po EntityRender)
Tak wygląda uproszczony model Buildingu (jest jeszcze Ship, Asteroid... ale pomińmy to)
class EntityProporties {
public:
int x;
int y;
sf::Sprite sprite;
//......
}
class EntityRender : virtual public EntityProporties {
public:
virtual void Render() = 0;
void RenderSprite();
//....
}
class EntityTransform : virtual public EntityProporties {//......}
class EntityActivity : virtual public EntityProporties {//......}
class Entity : public EntityTransform, public EntityRender, public EntityActivity, virtual public EntityProporties {
public:
//.....
}
class Building : Entity {
public:
void Render();
//......
}
//....gdzies tam w pliku cpp
Building::Render() {
RenderCostam1();
RenderCostam2();
//....
RenderSprite();
//....
}
Dawid90ddgdb ./stryku
, a potemkill
.