debugging c ++: ../nptl/sysdeps/unix/sysv/linux/raise.c: Keine solche Datei oder kein Verzeichnis

8

Ich verwende gdb , um ein C++ -Programm zu debuggen. In der Zeile

%Vor%
  • Der Parameter prevId Wert ist 0 ;
  • die Methode GetTagIdFromState(maxState) return s 50 ;

Beim Debuggen bekomme ich folgende Fehler.

%Vor%     
wangzhiju 31.10.2012, 06:58
quelle

3 Antworten

7

Ihre Anwendung funktioniert wie beabsichtigt. Die Assertion schlägt fehl (da die übergebenen Werte nicht gleich sind, erhält das Makro assert 0) und Ihr Programm wird abgebrochen. So funktioniert es:

  

Wenn NDEBUG nicht definiert ist, prüft assert, ob sein Argument (welches   muss skalaren Typ haben) vergleicht gleich null. Wenn ja, behaupten Sie   gibt implementierungsspezifische Diagnoseinformationen auf dem Standard aus   Fehlerausgabe und ruft std :: abort auf.

Betonung meiner.

Überprüfen Sie diese Assert-Referenz , um weitere Informationen zu erhalten.

    
SingerOfTheFall 31.10.2012 07:00
quelle
1

Ich bin gerade auf diesen Fehler gestoßen, als ich versuchte, ein Programm auf einem Raspberry Pi zu debuggen. Das Programm verwendet das GPIO in einer Weise, die erfordert, dass das Programm als root ausgeführt wird. Zum Beispiel führe ich das Programm aus, das ich so geschrieben habe:

%Vor%

Ich habe dies jedoch vergessen, als ich den Debugger gestartet habe und

versucht habe %Vor%

Und ich habe den Fehler, den Sie anscheinend begegnet sind:

%Vor%

Wenn ich es mit Sudo ausgeführt habe, hat es funktioniert.

%Vor%

Ich hoffe, das ist hilfreich für jemanden im selben Boot.

    
Marvo 06.05.2016 05:08
quelle
0

Dies sollte Sie über die Verwendung der Assert-Funktion

auf dem Laufenden halten %Vor%

Bewerten Sie die Behauptung Wenn der Argumentausdruck dieses Makros mit der funktionalen Form gleich Null ist (d. H. Der Ausdruck ist falsch), wird eine Nachricht in das Standardfehlergerät geschrieben, und der Abbruch wird aufgerufen, wodurch die Programmausführung beendet wird.

Die Einzelheiten der angezeigten Nachricht hängen von der spezifischen Implementierung im Compiler ab. Sie müssen jedoch Folgendes enthalten: den Ausdruck, dessen Assertion fehlgeschlagen ist, den Namen der Quelldatei und die Zeilennummer, an der sie aufgetreten ist. Ein übliches Ausdrucksformat ist:

Assertion failed: Ausdruck, Dateiname, Zeilennummer Dieses Makro ist deaktiviert, wenn zum Zeitpunkt des Einfügens von assert.h bereits ein Makro mit dem Namen NDEBUG definiert wurde. Dies ermöglicht es einem Codierer, während des Debuggens des Programms viele Asser-Aufrufe in einen Quellcode einzuschließen und dann alle für die Produktionsversion zu deaktivieren, indem er einfach eine Zeile wie folgt einfügt:

%Vor%

Daher ist dieses Makro so konzipiert, dass es Programmierfehler, nicht Benutzer- oder Lauffehler, erfasst, da es im Allgemeinen deaktiviert wird, nachdem ein Programm seine Debugging-Phase beendet hat. aus: C ++ Ref

    
Alireza Soori 31.10.2012 07:10
quelle

Tags und Links