2013-12-05 8 views
4

Мы столкнулись с проблемой, что сторонняя библиотека зарегистрировала некоторые функции с atexit(). Есть ли способ узнать, сколько (или каких) функций было зарегистрировано?Сколько функций было зарегистрировано atexit()?

Я проверил here, но он сказал нет.

Я попытался получить ATEXIT_MAX с sysconf, но оказалось, что это огромное количество, как 2^31-1.

Есть ли способ заставить его работать?

+1

Чтобы сделать работу чем? Это просто значит быть таким: вы не можете его изменить или проверить. Каждая библиотека, которая его использует, должна точно знать, что она делает, и только использовать ее для очистки, которая не может быть достигнута иначе. –

ответ

2

Вы можете попытаться прокрасться в свою собственную функцию atexit(), эффективно отменяя исходный, а затем протокол, каждый вызов которого осуществляется сторонним программным обеспечением. Но это, вероятно, не то, что вы ищете.

+0

Спасибо. Это может помочь нам найти проблему. – Zhongzhi

+0

@ Чжунчжи, вы все еще не объяснили, что вы подразумеваете под «проблемой». –

+0

@JensGustedt. Когда программа exit() с кодом состояния, родительский процесс не получил код состояния, переданный exit(). Поэтому я предполагаю, что это связано с тем, что некоторые сторонники atexit() изменили поведение. – Zhongzhi

Смежные вопросы