Zesstra | 1862697 | 2017-01-31 10:38:27 +0100 | [diff] [blame] | 1 | debug_info() |
| 2 | ============ |
| 3 | |
| 4 | DEPRECATED |
| 5 | ---------- |
| 6 | :: |
| 7 | |
| 8 | SYNOPSIS |
| 9 | -------- |
| 10 | :: |
| 11 | |
| 12 | #include <debug_info.h> |
| 13 | |
| 14 | mixed debug_info(int flag) |
| 15 | mixed debug_info(int flag, mixed arg) |
| 16 | mixed debug_info(int flag, mixed arg2, mixed arg3) |
| 17 | |
| 18 | BESCHREIBUNG |
| 19 | ------------ |
| 20 | :: |
| 21 | |
| 22 | Sammelt entsprechend den Angaben in <flag> gewisse intere Debuginfos |
| 23 | des Treibers. <flag> kann dabei folgende in debug_info.h definierte |
| 24 | Werte enthalten: |
| 25 | |
| 26 | DINFO_OBJECT (0): Angezeigt werden Informationen zum in <arg> |
| 27 | spezifizierten Objekt, zum Beispiel heart_beat, |
| 28 | enable_commands etc. Die Funktion liefert 0 zurueck. |
| 29 | |
| 30 | DINFO_MEMORY (1): Angezeigt werden Informationen zu |
| 31 | Speicherbelegung und -ausnutzung des in <arg> spezifizierten |
| 32 | Objekts, zum Beispiel Anzahl Strings, Variablen, geerbte Files, |
| 33 | Objektgroesse etc. Die Funktion liefert 0 zurueck. |
| 34 | |
| 35 | DINFO_OBJLIST (2): debug_info() liefert Objekte aus der globalen |
| 36 | Objektliste. Wenn <arg2> nicht angegeben wird, wird das erste |
| 37 | Element aus der Objektliste gelierfert, wenn <arg2> eine Zahl n |
| 38 | ist, das n-te Element. Ist <arg2> ein Objekt, werden die |
| 39 | nachfolgenden Objekte in der Objektliste zurueck geliefert. |
| 40 | Das optionale Argument <arg3> bezeichnet die Anzahl zurueck |
| 41 | gelieferter Objekte. Wenn <arg3> 0 ist, wird ein einzelnes |
| 42 | Objekt zurueck geliefert. Wenn <arg3> eine Zahl m enthaelt, wird |
| 43 | ein Array mit hoechstens m Elementen zurueck geliefert. Auf |
| 44 | diese Weise kann ein Array mit saemtlichen Objekten im Spiel |
| 45 | erzeugt werden, wenn fuer <arg3> __INT_MAX__ gesetzt wird (eine |
| 46 | entsprechende maximale Arraygroesse vorausgesetzt). |
| 47 | |
| 48 | DINFO_MALLOC (3): Entsprichend der Eingabe des 'malloc'-Kommandos. |
| 49 | Es muessen keine weiteren Argumente angegeben werden. |
| 50 | |
| 51 | DINFO_STATUS (4): Angezeigt wird die Statusinformation des Drivers. |
| 52 | Optional kann das Argument <arg> die Werte 0, "tables", "swap", |
| 53 | "malloc" oder andere vom Driver akzeptierte Argumente enthalten. |
| 54 | Das Resultat ist ein druckbarer String, der die Statusinformation |
| 55 | enthaelt, oder 0, wenn ein ungueltiges Argument angegeben wurde. |
| 56 | |
| 57 | DINFO_DUMP (5): Die durch <arg2> angeforderte Information wird |
| 58 | in ein File geschrieben, das man mit <arg3> angeben kann. Wird |
| 59 | <arg3> nicht angegeben, wird eine Standarddatei verwendet. |
| 60 | debug_info() ueberprueft mittels master->valid_write(), ob es |
| 61 | das File schreiben kann. Falls bereits eine entsprechende Datei |
| 62 | existiert, wird diese ueberschrieben. Die Funktion liefert 1 |
| 63 | bei Erfolg, 0 sonst. |
| 64 | |
| 65 | <arg2> == "objects": liefert Informationen ueber alle Objekte im |
| 66 | Spiel und schreibt diese standardmaessig in die Datei |
| 67 | /OBJ_DUMP, dem valid_write() wird 'objdump' uebergeben. |
| 68 | Die Datei enthaelt fuer jedes Objekt eine Zeile, in der |
| 69 | jeweils folgende Informationen aufgelistet sind: |
| 70 | - Name des Objekts (object_name) |
| 71 | - Groesse im Speicher, gemeinsamer genutzter Speicher nur |
| 72 | einmal gezaehlt |
| 73 | - Groesse im Speicher, wenn es keine gemeinsam genutzte |
| 74 | Daten geben wuerde |
| 75 | - Anzahl Referenzen |
| 76 | - 'HB', wenn das Objekt einen heart_beat hat, sonst nichts. |
| 77 | - der Name der Umgebung oder '--', wenn das Objekt keine |
| 78 | Umgebung hat |
| 79 | - in Klammern die Anzahl der durch das Objekt verursachten |
| 80 | Verarbeitungsschritten (execution ticks) |
| 81 | - der Swap-Status: |
| 82 | > nichts, wenn das Objekt nicht geswapt wurde |
| 83 | > 'PROG SWAPPED', wenn nur das Programm geswapt wurde |
| 84 | > 'VAR SWAPPED', wenn nur die Variablen geswapt wurden |
| 85 | > 'SWAPPED', wenn beide geswapt wurden |
| 86 | - die Zeit, zu der das Objekt geladen wurde. |
| 87 | |
| 88 | <arg2> == "destructed": liefert Informationen ueber alle |
| 89 | zerstoerten Objekte und schreibt diese standardmaessig in |
| 90 | die Datei /DEST_OBJ_DUMP, dem valid_write() wird 'objdump' |
| 91 | uebergeben. Die Datei enthaelt fuer jedes Objekt eine Zeile, |
| 92 | in der jeweils folgende Informationen aufgelistet sind: |
| 93 | - Name des Objekts (object_name) |
| 94 | - Anzahl der Referenzen |
| 95 | - 'NEW', wenn das Objekt in diesem Verarbeitungszyklus |
| 96 | zerstoert wurde, nichts wenn es bereits fruehre zerstoert |
| 97 | worden war. |
| 98 | |
| 99 | <arg2> == "opcodes": liefert Nutzungsinformationen ueber die |
| 100 | opcodes. Standardmaessig wird in die Datei /OPC_DUMP |
| 101 | geschrieben. valid_write() wird 'opcdump' uebergeben. |
| 102 | |
| 103 | <arg2> == "memory": liefert eine Liste aller allokierten |
| 104 | Speicherbloecke. |
| 105 | Standardmaessig wird in die Datei /MEMORY_DUMP geschrieben; |
| 106 | valid_write() wird 'memdump' uebergeben. Existiert die |
| 107 | Datei bereits, werden die neuen Daten angehaengt. |
| 108 | Wenn der Allokator einen Speicherabzug nicht unterstuetzt, |
| 109 | wird keine Datei geschrieben und immer 0 zurueckgegeben. |
| 110 | Diese Funktion ist am nuetzlichsten wenn der Allokator |
| 111 | mit MALLOC_TRACE und MALLOC_LPC_TRACE kompiliert |
| 112 | wurde. |
| 113 | |
| 114 | |
| 115 | DINFO_DATA (6): Liefert Rohdaten ueber gewisse, durch <arg2> |
| 116 | spezifizierte Aspekte des Treibers. Das Resultat der Funktion ist |
| 117 | ein Array mit der Information oder 0, falls <arg2> keinen |
| 118 | gueltigen Wert enthalten hat. |
| 119 | Ist <arg3> eine Zahl, die kleiner ist als die Anzahl Elemente im |
| 120 | Resultat-Array, liefert die Funktion nur das entsprechende |
| 121 | Element zurueck. |
| 122 | Zulaessige Werte fuer <arg2> sind: DID_STATUS, DID_SWAP und |
| 123 | DID_MALLOC. |
| 124 | |
| 125 | <arg2> == DID_STATUS (0): Liefert die "status" und "status table" |
| 126 | Information. Folgende Indizes sind definiert: |
| 127 | - int DID_ST_BOOT_TIME |
| 128 | die Zeit (time()), zu der das Mud gestartet wurde |
| 129 | - int DID_ST_ACTIONS |
| 130 | - int DID_ST_ACTIONS_SIZE |
| 131 | die Anzahl und Groesse im Speicher der allozierten |
| 132 | Actions. |
| 133 | - int DID_ST_SHADOWS |
| 134 | - int DID_ST_SHADOWS_SIZE |
| 135 | Anzahl und Groesse im Speicher aller allozierten |
| 136 | Shadows. |
| 137 | - int DID_ST_OBJECTS |
| 138 | - int DID_ST_OBJECTS_SIZE |
| 139 | Anzahl und Groesse im Speicher aller Objekte. |
| 140 | - int DID_ST_OBJECTS_SWAPPED |
| 141 | - int DID_ST_OBJECTS_SWAP_SIZE |
| 142 | Anzahl und Groesse im Speicher der geswapten |
| 143 | Variablenbloecke der Objekte |
| 144 | - int DID_ST_OBJECTS_LIST |
| 145 | Anzahl Objekte in der Objektliste |
| 146 | - int DID_ST_OBJECTS_NEWLY_DEST |
| 147 | Anzahl der frisch zerstoerten Objekte (d.h. Objekte, |
| 148 | die in diesem Verarbeitungszyklus zerstoert wurden) |
| 149 | - int DID_ST_OBJECTS_DESTRUCTED |
| 150 | Anzahl der zerstoerten, aber noch immer referenzierten |
| 151 | Objekte, ohne die unter DID_ST_OBJECTS_NEWLY_DEST |
| 152 | bereits gezaehlten. |
| 153 | - int DID_ST_OBJECTS_PROCESSED |
| 154 | Anzahl der gelisteten Objekte, die im letzten |
| 155 | Verarbeitungszyklus verarbeitet wurden. |
| 156 | - float DID_ST_OBJECTS_AVG_PROC |
| 157 | Durchschnittlicher Anteil der pro Zyklus verarbeiteten |
| 158 | Objekte, ausgedrueckt in Prozent (0 .. 1.0) |
| 159 | - int DID_ST_OTABLE |
| 160 | Anzahl eingetragener Objekte in der Objekttabelle |
| 161 | - int DID_ST_OTABLE_SLOTS |
| 162 | Anzahl von Hashplaetzen, die von jeder Objekttabelle |
| 163 | bereitgestellt werden |
| 164 | - int DID_ST_OTABLE_SIZE |
| 165 | Durch die Objekttabelle belegter Speicher |
| 166 | - int DID_ST_HBEAT_OBJS |
| 167 | Anzahl Objekte mit einem heart_beat() |
| 168 | - int DID_ST_HBEAT_CALLS |
| 169 | Anzahl aktiver heart_beat() Zyklen bisher (d.h. |
| 170 | Zyklen, in denen mindestens eine heart_beat() Funktion |
| 171 | aufgerufen wurde) |
| 172 | - int DID_ST_HBEAT_CALLS_TOTAL |
| 173 | Gesamtzahl von heart_beat() Zyklen bisher. |
| 174 | - int DID_ST_HBEAT_SLOTS |
| 175 | - int DID_ST_HBEAT_SIZE |
| 176 | Anzahl und Groesse aller allozierten Eintraege in der |
| 177 | heart_beat() Tabelle. |
| 178 | - int DID_ST_HBEAT_PROCESSED |
| 179 | Anzahl heart_beat()s im letzten Zyklus |
| 180 | - float DID_ST_HBEAT_AVG_PROC |
| 181 | Durchschnittlicher Anteil der pro Zyklus aufgerufenen |
| 182 | heart_beat()s, ausgedrueckt in Prozent (0 .. 1.0) |
| 183 | - int DID_ST_CALLOUTS |
| 184 | Anzahl und Groesse aller laufenden call_out()s |
| 185 | - int DID_ST_ARRAYS |
| 186 | - int DID_ST_ARRAYS_SIZE |
| 187 | Anzahl und Groesse aller Arrays |
| 188 | - int DID_ST_MAPPINGS |
| 189 | - int DID_ST_MAPPINGS_SIZE |
| 190 | Anzahl und Groesse aller Mappings |
| 191 | - int DID_ST_PROGS |
| 192 | - int DID_ST_PROGS_SIZE |
| 193 | Anzahl und Groesse aller Programme |
| 194 | - int DID_ST_PROGS_SWAPPED |
| 195 | - int DID_ST_PROGS_SWAP_SIZE |
| 196 | Anzahl und Groesse der geswapten Programme |
| 197 | - int DID_ST_USER_RESERVE |
| 198 | - int DID_ST_MASTER_RESERVE |
| 199 | - int DID_ST_SYSTEM_RESERVE |
| 200 | Momentane Groesse der drei Speicherreserven |
| 201 | - int DID_ST_ADD_MESSAGE |
| 202 | - int DID_ST_PACKETS |
| 203 | - int DID_ST_PACKET_SIZE |
| 204 | Anzahl Aufrufe von add_message(), Anzahl und Groesse |
| 205 | der versendeten Pakete. |
| 206 | Wenn der Driver nicht mit COMM_STAT kompiliert wurde, |
| 207 | liefern alle drei Werte immer -1 zurueck. |
| 208 | - int DID_ST_APPLY |
| 209 | - int DID_ST_APPLY_HITS |
| 210 | Anzahl Aufrufen von apply_low(), und wie viele davon |
| 211 | Cache-Treffer waren. Wenn der Driver nicht mit |
| 212 | APPLY_CACHE_STAT kompiliert wurde, liefern beide |
| 213 | Werte immer -1. |
| 214 | - int DID_ST_STRINGS |
| 215 | - int DID_ST_STRING_SIZE |
| 216 | Anzahl unterschiedlicher Strings in der Stringtabelle, |
| 217 | sowie ihre Groesse |
| 218 | - int DID_ST_STR_TABLE_SIZE |
| 219 | Groesse der String Tabelle |
| 220 | - int DID_ST_STR_REQ |
| 221 | - int DID_ST_STR_REQ_SIZE |
| 222 | Gesamte Anzahl von String Allokationen, und ihre |
| 223 | Groesse |
| 224 | - int DID_ST_STR_SEARCHES |
| 225 | - int DID_ST_STR_SEARCH_LEN |
| 226 | Anzahl Suchvorgaenge in der Stringtabelle und die |
| 227 | Gesamtlaenge des Suchstrings |
| 228 | - int DID_ST_STR_FOUND |
| 229 | Anzahl erfolgreicher Suchvorgaenge |
| 230 | - int DID_ST_STR_ENTRIES |
| 231 | Anzahl Eintraege (Hash Ketten) in der String Tabelle |
| 232 | - int DID_ST_STR_ADDED |
| 233 | Anzahl zur String Tabelle bisher hinzugefuegter |
| 234 | Strings |
| 235 | - int DID_ST_STR_DELETED |
| 236 | Anzahl aus der String Tabelle bisher geloeschter |
| 237 | Strings |
| 238 | - int DID_ST_STR_COLLISIONS |
| 239 | Anzahl zu einer existierenden Hash Kette hinzugefuegte |
| 240 | Strings |
| 241 | - int DID_ST_RX_CACHED |
| 242 | Anzahl gecacheter regulaerer Ausdruecke (regular |
| 243 | expressions) |
| 244 | - int DID_ST_RX_TABLE |
| 245 | - int DID_ST_RX_TABLE_SIZE |
| 246 | Anzahl Plaetze in der Regexp Cache Tabelle und |
| 247 | Speicherbedarf der gecacheten Ausdruecke |
| 248 | - int DID_ST_RX_REQUESTS |
| 249 | Anzahl Anfragen fuer neue regexps |
| 250 | - int DID_ST_RX_REQ_FOUND |
| 251 | Anzahl gefundener regexps in der regexp Cache Tabelle |
| 252 | - int DID_ST_RX_REQ_COLL |
| 253 | Anzahl angefragter regexps, die mit einer bestehenden |
| 254 | regexp kollidierten |
| 255 | - int DID_ST_MB_FILE |
| 256 | Die Groesse des 'File' Speicherpuffers |
| 257 | - int DID_ST_MB_SWAP |
| 258 | Die Groesse des 'Swap' Speicherpuffers |
| 259 | |
| 260 | <arg2> == DID_SWAP (1): Liefert "status swap"-Information: |
| 261 | - int DID_SW_PROGS |
| 262 | - int DID_SW_PROG_SIZE |
| 263 | Anzahl und Groesse der geswappten Programmbloecke |
| 264 | - int DID_SW_PROG_UNSWAPPED |
| 265 | - int DID_SW_PROG_U_SIZE |
| 266 | Anzahl und Groesse der nicht geswappten Bloecke |
| 267 | - int DID_SW_VARS |
| 268 | - int DID_SW_VAR_SIZE |
| 269 | Anzahl und Groesse der geswappten Variablenbloecke |
| 270 | - int DID_SW_FREE |
| 271 | - int DID_SW_FREE_SIZE |
| 272 | Anzahl und Groesse der freien Bloecke in der |
| 273 | Auslagerungsdatei |
| 274 | - int DID_SW_FILE_SIZE |
| 275 | Groesse der Auslagerungsdatei |
| 276 | - int DID_SW_REUSED |
| 277 | Gesamter wiederverwendeter Speicherplatz in der |
| 278 | Auslagerungsdatei |
| 279 | - int DID_SW_SEARCHES |
| 280 | - int DID_SW_SEARCH_LEN |
| 281 | Anzahl und Gesamtlaenge der Suchvorgaenge nach |
| 282 | wiederverwendbaren Bloecken in der Auslagerungsdatei |
| 283 | - int DID_SW_F_SEARCHES |
| 284 | - int DID_SW_F_SEARCH_LEN |
| 285 | Anzahl und Gesamtlaenge der Suchvorgaenge nach einem |
| 286 | Block, der frei gemacht werden kann. |
| 287 | - int DID_SW_COMPACT |
| 288 | TRUE wenn der Swapper im Compact-Modus laeuft |
| 289 | - int DID_SW_RECYCLE_FREE |
| 290 | TRUE wenn der Swapper gerade einen freien Block |
| 291 | wiederverwendet |
| 292 | |
| 293 | <arg2> == DID_MEMORY (2): Liefert die "status malloc"-Information: |
| 294 | - string DID_MEM_NAME |
| 295 | Der Name des Allokators: "sysmalloc", "smalloc", |
| 296 | "slaballoc" |
| 297 | - int DID_MEM_SBRK |
| 298 | - int DID_MEM_SBRK_SIZE |
| 299 | Anzahl und Groesse der Speicherbloecke, die vom |
| 300 | Betriebssystem angefordert wurden (smalloc, slaballoc) |
| 301 | - int DID_MEM_LARGE |
| 302 | - int DID_MEM_LARGE_SIZE |
| 303 | - int DID_MEM_LFREE |
| 304 | - int DID_MEM_LFREE_SIZE |
| 305 | Anzahl und Groesse der grossen allozierten bzw. |
| 306 | freien Bloecke (smalloc, slaballoc) |
| 307 | - int DID_MEM_LWASTED |
| 308 | - int DID_MEM_LWASTED_SIZE |
| 309 | Anzahl und Groesse der unbrauchbaren grossen |
| 310 | Speicherfragmente (smalloc, slaballoc) |
| 311 | - int DID_MEM_CHUNK |
| 312 | - int DID_MEM_CHUNK_SIZE |
| 313 | Anzahl und Groesse kleiner Speicherbloecke (chunk |
| 314 | blocks; smalloc, slaballoc) |
| 315 | - int DID_MEM_SMALL |
| 316 | - int DID_MEM_SMALL_SIZE |
| 317 | - int DID_MEM_SFREE |
| 318 | - int DID_MEM_SFREE_SIZE |
| 319 | Anzahl und groesse der allozierten bzw. freien |
| 320 | kleinen Speicherbloecke (smalloc, slaballoc) |
| 321 | - int DID_MEM_SWASTED |
| 322 | - int DID_MEM_SWASTED_SIZE |
| 323 | Anzahl und Groesse der unbrauchbar kleinen |
| 324 | Speicherfragmente (smalloc, slaballoc) |
| 325 | - int DID_MEM_MINC_CALLS |
| 326 | - int DID_MEM_MINC_SUCCESS |
| 327 | - int DID_MEM_MINC_SIZE |
| 328 | Anzahl Aufrufe von malloc_increment(), Anzahl der |
| 329 | erfolgreichen Aufrufe und die Groesse des auf diese |
| 330 | Art allozierten Speichers (smalloc, slaballoc) |
| 331 | - int DID_MEM_PERM |
| 332 | - int DID_MEM_PERM_SIZE |
| 333 | Anzahl und Groesse permanenter (non-GCable) |
| 334 | Allokationen (smalloc, slaballoc) |
| 335 | - int DID_MEM_CLIB |
| 336 | - int DID_MEM_CLIB_SIZE |
| 337 | Anzahl und Groesse der Allokationen durch Clib |
| 338 | Funktionen (nur smalloc, slaballoc mit SBRK_OK) |
| 339 | - int DID_MEM_OVERHEAD |
| 340 | Overhead fuer jede Allokation (smalloc, slaballoc) |
| 341 | - int DID_MEM_ALLOCATED |
| 342 | Der Speicher, der durch die Speicherverwaltung |
| 343 | alloziert wurde, inklusive den Overhead fuer die |
| 344 | Speicherverwaltung (smalloc, slaballoc) |
| 345 | - int DID_MEM_USED |
| 346 | Der Speicher, der durch den Driver belegt ist, ohne |
| 347 | den durch die Speicherverwaltung belegten Speicher |
| 348 | (smalloc, slaballoc) |
| 349 | - int DID_MEM_TOTAL_UNUSED |
| 350 | Der Speicher, der vom System zur Verfuegung gestellt, |
| 351 | aber vom Treiber nicht benoetigt wird. |
| 352 | - int DID_MEM_AVL_NODES (smalloc, slaballoc) |
| 353 | Anzahl der AVL-Knoten, die zur Verwaltung der |
| 354 | freien grossen Speicherbloecke verwendet werden |
| 355 | (nur smalloc). Dieser Wert kann in Zukunft |
| 356 | wieder verschwinden. |
| 357 | - mixed * DID_MEM_EXT_STATISTICS (smalloc, slaballoc) |
| 358 | Detaillierte Statistiken des Allokators sofern |
| 359 | diese aktiviert wurden; 0 anderenfalls. |
| 360 | |
| 361 | Dieser Wert kann in Zukunft wieder verschwinden. |
| 362 | |
| 363 | Das Array enthaelt NUM+2 Eintraege, wobei NUM |
| 364 | Anzahl der verschiedenen 'kleinen' |
| 365 | Blockgroessen ist. Eintrag [NUM] beschreibt |
| 366 | die uebergrossen 'kleinen' Bloecke, Eintrag |
| 367 | [NUM+1] beschreibt summarisch die 'grossen' |
| 368 | Bloecke. Jeder Eintrag ist ein Array mit |
| 369 | diesen Feldern: |
| 370 | |
| 371 | int DID_MEM_ES_MAX_ALLOC: |
| 372 | Maximale Anzahl allokierter Bloecke dieser |
| 373 | Groesse. |
| 374 | |
| 375 | int DID_MEM_ES_CUR_ALLOC: |
| 376 | Derzeitige Anzahl allokierter Bloecke dieser |
| 377 | Groesse. |
| 378 | Current number of allocated blocks of this size. |
| 379 | |
| 380 | int DID_MEM_ES_MAX_FREE: |
| 381 | Maximale Anzahl freier Bloecke dieser |
| 382 | Groesse. |
| 383 | |
| 384 | int DID_MEM_ES_CUR_FREE: |
| 385 | Derzeitige Anzahl freier Bloecke dieser |
| 386 | Groesse. |
| 387 | |
| 388 | float DID_MEM_ES_AVG_XALLOC: |
| 389 | Durchschnittliche Zahl von Allokationen pro |
| 390 | Sekunde. |
| 391 | |
| 392 | float DID_MEM_ES_AVG_XFREE: |
| 393 | Durchschnittliche Zahl von Deallokationen pro |
| 394 | Sekunde. |
| 395 | |
| 396 | Die Durchschnittsstatistiken schliessen interne |
| 397 | Umsortierungen der Blocklisten nicht ein. |
| 398 | |
| 399 | |
| 400 | DINFO_TRACE (7): Liefert die 'trace' Information aus dem |
| 401 | Call Stack entsprechend der Spezifikation in <arg2>. Das Resultat |
| 402 | ist entweder ein Array (dessen Format nachstehend erlaeutert ist) |
| 403 | oder ein druckbarer String. Wird <arg2> weggelasen entspricht |
| 404 | dies DIT_CURRENT. |
| 405 | |
| 406 | <arg2> == DIT_CURRENT (0): Momentaner Call Trace |
| 407 | == DIT_ERROR (1): Letzter Fehler Trace (caught oder |
| 408 | uncaught) |
| 409 | == DIT_UNCAUGHT_ERROR (2): Letzer Fehler Trace, der nicht |
| 410 | gefangen werden konnte (uncaught) |
| 411 | |
| 412 | Die Information wird in Form eines Array uebergeben. |
| 413 | |
| 414 | Die Fehlertraces werden nur geaendert, wenn ein entsprechender |
| 415 | Fehler auftritt; ausserdem werden sie bei einem GC (Garbage |
| 416 | Collection) geloescht. Nach einem Fehler, der nicht gefangen |
| 417 | werden konnte (uncaught error), weisen beide Traces auf das |
| 418 | gleiche Array, sodass der ==-Operator gilt. |
| 419 | |
| 420 | Wenn das Array mehr als ein Element enthaelt, ist das erste |
| 421 | Element 0 oder der Name des Objekts, dessen heart_beat() den |
| 422 | laufenden Zyklus begonnen hat; alle nachfolgenden Elemente |
| 423 | bezeichnen den Call Stack, beginnen mit der hoechsten |
| 424 | aufgerufenen Funktion. |
| 425 | |
| 426 | Alle Eintraege im Array sind wiederum Arrays mit folgenden |
| 427 | Elementen: |
| 428 | - int[TRACE_TYPE]: Der Typ der aufrufenden Funktion |
| 429 | TRACE_TYPE_SYMBOL (0): ein Funktionssymbol (sollte nicht |
| 430 | vorkommen) |
| 431 | TRACE_TYPE_SEFUN (1): eine simul-efun |
| 432 | TRACE_TYPE_EFUN (2): eine Efun Closure |
| 433 | TRACE_TYPE_LAMBDA (3): eine lambda Closure |
| 434 | TRACE_TYPE_LFUN (4): eine normale Lfun |
| 435 | - int[TRACE_NAME] |
| 436 | _TYPE_EFUN : entweder der Name der Funktion oder der |
| 437 | Code einer Operator-Closure |
| 438 | _TYPE_LAMBDA : die numerische Lambda-ID |
| 439 | _TYPE_LFUN : der Name der Lfun |
| 440 | - string[TRACE_PROGRAM]: Der Name des Programms mit dem Code |
| 441 | - string[TRACE_OBJECT]: Der Name des Objekts, fuer das der |
| 442 | Code ausgefuehrt wurde |
| 443 | - int[TRACE_LOC]: |
| 444 | _TYPE_LAMBDA : Der Offset des Programms seit Beginn des |
| 445 | Closure-Codes |
| 446 | _TYPE_LFUN : Die Zeilennummer. |
| 447 | |
| 448 | <arg2> == DIT_STR_CURRENT (3): Liefert Informationen ueber den |
| 449 | momentanen Call Trace als druckbarer String. |
| 450 | |
| 451 | <arg2> == DIT_CURRENT_DEPTH (4): Liefert die Zahl der Frames auf |
| 452 | dem Control Stack (Rekursionstiefe). |
| 453 | |
| 454 | DINFO_EVAL_NUMBER (8): gibt die Nummer der aktuellen Berechnung |
| 455 | zurueck. Diese Nummer wird fuer jeden vom driver initiierten |
| 456 | Aufruf von LPC-Code erhoeht, also bei Aufruf von: |
| 457 | - Kommandos (die per add_action hinzugefuegt wurden) |
| 458 | - heart_beat, reset, clean_up |
| 459 | - Aufrufe durch call_out oder input_to |
| 460 | - master applies, die auf externe Ereignisse zurueckgehen |
| 461 | - driver hooks genauso |
| 462 | - Rueckrufen von send_erq |
| 463 | - logon in interaktiven Objekten |
| 464 | |
| 465 | Dieser Zaehler kann z.B. benutzt werden, um zu verhindern, dass |
| 466 | bestimmte Aktionen mehrfach innerhalb eines heart_beat() |
| 467 | ausgefuehrt werden. Eine andere Anwendungsmoeglichkeit sind |
| 468 | Zeitstempel zur Sortierung zur Sortierung von Ereignissen. |
| 469 | |
| 470 | Es ist zu beachten, dass der Zaehler ueberlaufen kann, insbesondere |
| 471 | auf 32-bit-Systemen. Er kann demzufolge auch negativ werden. |
| 472 | |
| 473 | GESCHICHTE |
| 474 | ---------- |
| 475 | :: |
| 476 | |
| 477 | Seit 3.2.7 liefert DINFO_STATUS die Information zurueck, anstatt sie |
| 478 | nur auszugeben. |
| 479 | DINFO_DUMP wurde in 3.2.7 eingefuehrt. |
| 480 | LDMud 3.2.8 fuegte die Datengroesse des Objekts zum Resultat von |
| 481 | DINFO_MEMORY hinzu, ausserdem die DINFO_DATA Abfrage und die |
| 482 | verschiedenen DID_MEM_WASTED Statistiken. |
| 483 | LDMud 3.2.9 fuegte DINFO_TRACE, das Indizierungs-Feature von |
| 484 | DINFO_DATA, den 'destructed'-DINFO_DUMP, die DID_MEM_CLIB*, |
| 485 | die DID_MEM_PERM*, ausserdem DID_ST_OBJECTS_NEWLY_DEST, |
| 486 | DID_ST_OBJECTS_DEST, DID_MEM_OVERHEAD, DID_MEM_ALLOCATED, |
| 487 | DID_MEM_USED, DID_MEM_TOTAL_UNUSED, DID_ST_HBEAT_CALLS_TOTAL |
| 488 | und die found / added / collision Stringstatistiken. |
| 489 | LDMud 3.2.10 fuegte die Erzeugungszeit zu DINFO_DUMP:"objects" hinzu, |
| 490 | entfernte DID_MEM_UNUSED aus DINFO_DATA:DID_MEMORY, fuegte |
| 491 | DINFO_DATA:DID_STATUS DID_ST_BOOT_TIME, DID_ST_MB_FILE und |
| 492 | DID_ST_MB_SWAP hinzu und entfernte DID_ST_CALLOUT_SLOTS daraus, |
| 493 | fuegte das dritte Argument zu DINFO_OBJLIST hinzu, und veraenderte |
| 494 | die Bedeutung von DID_ST_CALLOUT_SIZE und DID_ST_HBEAT_SIZE |
| 495 | bzw. _SLOTS. |
| 496 | LDMud 3.3.533 fuegte DID_MEM_AVL_NODES zu DINFO_DATA:DID_MEMORY |
| 497 | hinzu. |
| 498 | LDMud 3.3.603 fuegte DID_MEM_EXT_STATISTICS zu DINFO_DATA:DID_MEMORY |
| 499 | hinzu. |
| 500 | LDMud 3.3.718 fuegte DIT_CURRENT_DEPTH to DINFO_TRACE hinzu. |
| 501 | LDMud 3.3.719 fuegte DINFO_EVAL_NUMBER hinzu. |
| 502 | |
| 503 | SIEHE AUCH |
| 504 | ---------- |
| 505 | :: |
| 506 | |
| 507 | trace(E), traceprefix(E), malloc(D), status(D), dumpallobj(D) |
| 508 | |