Zum Hauptinhalt springen

Vor kurzem habe ich ein offensichtliches Compiler-Problem bei einem OpenVOS-Kunden diagnostiziert. Er hat zwei Module, auf denen OpenVOS Release 17.1 läuft. Er war in der Lage, ein Programm auf einem von ihnen erfolgreich zu kompilieren, aber der gcc-Compiler diagnostizierte einen "internen Compilerfehler", als er versuchte, es auf dem anderen Modul zu kompilieren. Ich habe versucht, das Problem hier zu duplizieren, konnte es aber nicht reproduzieren. Daher kam mir der Gedanke, dass das Problem spezifisch für das Modul sein muss, das den Fehler aufweist, und nicht ein Problem mit dem Compiler. Zuerst dachte ich, es könnte an den Änderungen der Standard-Befehlsgrenzwerte liegen, die wir in OpenVOS Release 17.1 vorgenommen haben. Eine Reihe von Programmen, einschließlich gcc und gmake, schlagen in Release 17.1 fehl, wenn die Befehlsgrenzwerte nicht auf konsistente Werte oder auf unendliche Werte gesetzt sind. Aber dieser Kunde hatte den Beispielbefehl set_default_cmd_limits in module_start_up.cm auskommentiert, so dass er bereits unendliche Werte verwendete, was wir in dieser Version empfehlen. Als nächstes bat ich den Kunden, im syserr_log nachzusehen, wann der Compilerfehler auftrat. Und tatsächlich fand er Meldungen, die darauf hinwiesen, dass sein Modul keinen Paging-Speicher mehr hatte. Obwohl seine Adressraumbeschränkungen seine Nutzung nicht einschränkten, verfügte er nicht über genügend Auslagerungsspeicher, so dass das Betriebssystem keine andere Wahl hatte, als ihn daran zu hindern, zusätzlichen virtuellen Speicher anzufordern. Dies führte zu einer Adressierungsausnahme im gcc, die zu der obskuren Fehlermeldung führte. Nachdem er eine neue Auslagerungsdatei auf einer dieser Festplatten angelegt hatte, konnte er sein umfangreiches Quellprogramm erstellen.

Die Moral von der Geschichte ist, dass es nie schadet, im syserr-Protokoll nachzusehen, ob OpenVOS irgendwelche Meldungen aufgezeichnet hat, wenn man einen seltsamen Fehler erhält (einen, den man noch nie gesehen hat oder den man nicht versteht). In diesem Fall enthielt das syserr-Protokoll eine Reihe von Meldungen, die den Fortschritt bei der Erschöpfung des Auslagerungsspeichers verfolgten. Da der Fehler reproduzierbar war, war der Zusammenhang ziemlich offensichtlich.

Wenn Sie Fragen zu den Meldungen im syserr_log haben, können Sie diese im OpenVOS-Forum stellen oder Sie können sich an Ihr lokales Customer Assistance Center wenden.

 

© 2024 Stratus Technologies.