2012-09-01 14 views
5

Mam wywołanie funkcji biblioteki trzeciej części rozproszone w wielu miejscach w moim pliku wykonywalnym. Mój plik wykonywalny jest zbudowany przy użyciu symboli debugowania, ale biblioteka strony trzeciej nie ma symboli debugowania, dlatego nie mogę umieścić punktu przerwania na tej funkcji. Chcę umieścić punkt przerwania za każdym razem, gdy wywoływana jest funkcja biblioteki, w celu sprawdzenia stosu wywołań. Jak ustawić punkt przerwania we wszystkich wywołaniach funkcji bibliotecznej w moim pliku wykonywalnym.Jak ustawić punkt przerwania w gdb dla wszystkich wywołań funkcji?

+0

Wygląda na to, że linker musiałby znać nazwę-> mapowanie adresu funkcji, nawet bez symboli debugowania, więc nie mogę zrozumieć, dlaczego nie można umieścić na nim punktu przerwania. Czy na pewno nie znajduje się w udostępnionej bibliotece, która jest ładowana po próbie umieszczenia punktu przerwania? –

Odpowiedz

4

myślę, że jedynym sposobem jest:

  • znaleźć żadnych wywołanie tej funkcji w kodzie;
  • utworzyć punkt przerwania w tej linii;
  • uruchom debuggera i zatrzymaj się;
  • napisać w gdb nexti, aby dostać się do pierwszej instrukcji funkcji;
  • uzyskać aktualny eip, który wskaże na początku tej funkcji;
  • utworzyć nowy punkt przerwania pod adresem wskazanym przez eip;
Powiązane problemy