Wie finde ich heraus, ob eine Funktion reentrant ist?

9

Ich versuche, eine Funktion aus einer Open Source-Bibliothek zu verwenden. Diese Funktion wird standardmäßig nicht von außen offen gelegt (daher nehme ich an, dass es sich nicht um eine direkt von der Open Source Bibliothek bereitgestellte Funktion handelt), aber ich brauche diese Funktion, um ein Problem in meinem Code zu lösen, also habe ich einige Änderungen in Makefile vorgenommen Funktion aus der Bibliothek.

Nun stellt sich die Frage, wie Sie sicherstellen können, dass diese Funktion einspringt.

Ich kann das nicht mit bloßem Auge herausfinden, weil es intern eine Reihe von Funktionen aufruft.

Um genau zu sein, bin ich neugierig zu wissen, ob in der GDB ein Werkzeug oder eine Option verfügbar ist, um zu überprüfen, ob meine Funktion nur lokale Variablen verwendet und globale Variablen nicht ändert.

    
Banu Prakash 23.04.2015, 13:11
quelle

1 Antwort

1

Um festzustellen, ob eine Funktion reentrant ist, analysieren Sie, was sie tut.

1) Es greift nicht auf globale Variablen zu, es sei denn, die Operationen auf diesen Globalen sind atomar (z. B. gibt es keine Möglichkeit, gleichzeitig global zu lesen und zu modifizieren). Dies bedeutet gewöhnlich, die Verwendung von Globals zu vermeiden oder einen synchronisierten Zugriff auf diese zu garantieren - z. Der gesamte Code, der ein globales ändert und liest, enthält einen Mutex bis zum Ende, so dass die Operationen serialisiert werden. Oder Code th

2) Der Code ist nicht selbstmodifizierend (glücklicherweise ist selbst modifizierender Code im Standard C oder C ++ relativ selten).

3) Es ruft keine anderen Funktionen auf, die keine reentranten Funktionen sind (die eine große Anzahl von Funktionen in der Standardbibliothek enthalten) oder Programme (z. B. Multiprozessing kompliziert normalerweise die Kontrolle, die erforderlich ist, um Wiedereintritt zu gewährleisten).

Mir ist kein spezielles Werkzeug bekannt, um eine Funktion zu analysieren, um Reentrancy zu bestimmen. In der Regel ist eine Funktion so konzipiert, dass sie reentrant ist (oder nicht). Wenn es in der Praxis keine Dokumentation gibt, die besagt, dass eine Funktion für die Wiedereingliederung konzipiert wurde, ist es eine faire Wette, dass sie nicht wiedereintritt.

    
Peter 23.04.2015 14:16
quelle

Tags und Links