In atemberaubenden Tagen sind einige Benutzer bei der Verwendung von gdb debug ns2 auf einen guten Fehlercode gestoßen. Dieses große Problem kann aus mehreren Gründen auftreten. Lassen Sie uns diese Art von jetzt besprechen.
Empfohlen
Speicherlecks
- OTcl
OTcl, insbesondere TclCL, ermöglicht es Ihnen, brandneue Objekte zu aktivieren,Als Ergebnis bietet es jedoch keine hilfreiche Garbage CollectionMechanismus für diese zugewiesenen Einheiten. Das kann auch einfach seinunbeabsichtigter Speicherverlust.Wichtig: Tools wie dmalloc purifykann ein Speicherleck des vorherigen Typs nicht erkennen.Betrachten Sie zum Beispiel dieses einfache OTcl-ns-Skript:
[neuer Simulator] definierenweil ich gerade null gesetzt habe {$ iSie erwarten, dass sich unsere Speichernutzung danach verlangsamtDer erste Zufallswert wird zugewiesen. Aber durch alle, weil OTcl es nicht hat.Verweigerungskennzeichen für den Fall, dass eine zweite Zufallsvariable ausgewählt wird,der vorherige wird nicht freigegeben und führt anschließend zu einem Speicherverlust.Leider gibt es für viele keine einfache Lösung, weil der MüllDas Beschäftigungsverhältnis ist damit grundsätzlich nicht vereinbar.Esprit auf Tcl. Nur so kann man es jetzt wirklich immer klar machenSchreiben Sie jedes OTcl-Objekt, das in Ihrem Skript zugewiesen ist, explizit ingenauso wie sie sich in C/C++ um angepasste Objekte kümmern.
- C / C ++
Eine weitere Quelle sind Speicherplatzlecks in C/C++. NDann ist diese Anleitung auch viel einfacherHalten Sie im Freien nach einigen speziell für diese Aufgabe entwickelten Werkzeugen Ausschau, zum Beispiel:dmalloc und sauber.Ns hat dieses andere
ns-pure
Ziel, um reines ns zu erstellenausführbare Anwendung. Stellen Sie zunächst sicher, dass das MakroPURIFY
möglicherweise in . istns Makefile besteht aus dem richtigenCompiler
für IhrLinker (schauen Sie sich die klare Manpage an, wenn Sie wissen, was die Anwendung ist).Geben Sie dannmake ns-pure
ein.Weitere Informationen zur Verwendung von ns mit libdmalloc finden Sie hier.
Debugging auf Tcl-Ebene
Ns unterstützt Don Libs Tcl-Debugger(sehenPostScript-DokumentationundQuelle).Installieren Sie das Programm oder schließen Sie die Basisseite inparallel zu ns-2 und die Situation wurde als begründet angesehen.Im Gegensatz zu dem beschriebenen Warten, das in der tcl-debug-Dokumentation zu finden ist,wir ernähren es nicht-D Flagge. Um das zu überstehenDebugger, füge dem Skript ein fröhliches “Debug 1” hinzuentsprechenden Platz.
Der Befehl rrr ns gen-map listet jedes Objekt in Rohform auf.
Dies ist sehr nützlich, um die Ausrichtung mit dieser Funktion eines Objekts zu korrelieren.unseren Namen gegeben.Objektnameect ist der gesamte OTcl-Deskriptor, normalerweise würde ich sagen, der Name ist“ _o ### ”. TclObjekte,auch dafür steht ein C++ Debugger zur Verfügung, wie bei gdbso -> name_.
Debugging auf C-Ebene
Jeder Standard-Debugger kann diese Aufgabe wahrscheinlich bewältigen.
Das folgende Makro für gdb macht es weniger umständlich zu verstehen, was drin ist. passierenRoutinen, die Tcl-Argumente annehmen TcpAgent :: Befehl ()):
## (wie beim Dumping von Argumenten, die an Tcl . übergeben werdendefiniere pargvcdefiniere $ the = 0während $ iTcl- und C-Debugging mischen
(Immer lustig, oder?)
Dies ist eine schmerzhafte Realität, die normalerweise beim Anzeigen der Tcl-Ausgabe und beim Debuggen auftritt.Tcl-Level-Sachen mit der Hoffnung, auf C-Level zu kommen, sagt und als Konsequenz umgekehrtund umgekehrt. Dies ist ein kleiner Tipp, um diese Aufgabe zu erleichtern.Wenn Sie ns gdb durchsucht haben, dann
- Der If-Telefonanruf (unten fettgedruckt) führt SieZugriff auf den Tcl-Debugger. Tipps, wie Sie diese Methode einzigartig machen könnenVerwenden des Debuggers und was Sie damit ausführen könnenUse Gdb Debug Ns2
Ispolzovat Gdb Debug Ns2
Usar Gdb Debug Ns2
Usa Gdb Debug Ns2
Uzyj Debugowania Gdb Ns2
Utiliser Gdb Debug Ns2
Utilizar Gdb Debug Ns2
Anvand Gdb Debug Ns2
Gebruik Gdb Debug Ns2
Gdb 디버그 Ns2 사용