【发布时间】:2016-06-05 08:28:59
【问题描述】:
我想创建我自己的assert 版本,它会打印一些日志,以防在NDEBUG 模式下调用断言。
我尝试使用LD_PRELOAD 技巧并重新定义断言宏,但它似乎完全忽略了宏定义并且覆盖__assert_fail 是无关紧要的,因为在NDEBUG 的情况下不会调用它。
如何覆盖 libc assert 宏?
我不想创建不同的函数,因为 assert 已经在项目中大量使用。
【问题讨论】:
-
Assert 是一个宏,所以 LD_PRELOAD 技巧不适用。您将需要取消定义标准宏(或不包括定义它的头文件),然后定义您自己的断言宏 before 包括使用它的任何其他头文件。如果代码已经编译成库,那就太晚了。
-
I do not want to create a different function since assert is already used heavily in the project.如果您使用 1980 年或更近的文本编辑器,这不是问题。 Refactor->rename 或 grep 和 diff/VCS 可能会为您省去很多麻烦,并且可以让您避免发明丑陋的 hack。
标签: c assert ld-preload ndebug