Возможно ли, что ловушка ошибок старого стиля ($ ZTRAP) устанавливается только в пользовательском режиме?
Документация по этому вопросу довольно хорошая, поэтому я не буду повторять все это здесь, но ключевой момент заключается в том, что $ ZTRAP не является Ново-ed таким же образом, как $ ETRAP. В некотором смысле, он «неявно новый», так как его значение относится только к текущему уровню стека и последующим вызовам. Он возвращается к любому предыдущему значению, как только вы выйдете за уровень, на котором он был установлен.
Кроме того, я не уверен, существует ли определенный порядок приоритета между обработчиками $ ETRAP и $ ZTRAP, но если $ ZTRAP имеет более высокий приоритет, это переопределит ваши $ ETRAP.
Вы можете попробовать установить $ ZTRAP непосредственно перед вызовом функции библиотеки. Установите для него значение, отличное от $ ETRAP, чтобы вы могли быть уверены, какой из них был запущен.
Даже это может не помочь, хотя. Если в библиотечной функции установлена переменная $ ZTRAP, новое значение вступит в силу, поэтому это не будет иметь значения. Это поможет вам только в том случае, если значение $ ZTRAP пришло откуда-то вверх по стеку.
Вы не упомянули, какая функция библиотеки вызвала это. В моей компании есть исходный код для некоторых библиотечных функций, поэтому, если вы скажете мне имя функции, я посмотрю, что я могу найти. Пожалуйста, дайте мне также значение $ ZVersion, чтобы я мог быть уверен, что мы говорим об одной и той же версии Cache.