【发布时间】:2015-06-23 18:57:40
【问题描述】:
我的程序使用环境变量DBG_MSG 值来确定调试消息的级别。 DBG_MSG=3 打印最大调试信息。
但是,当程序以一种奇怪的意外方式运行时,环境变量并未设置为打印完整的调试信息。并且当程序在环境设置下重新运行时,它不会显示相同的错误。
我正在考虑为SIGUSR1 实现一个信号处理程序,以便在运行时使用putenv(3) 设置此环境变量。这样我就可以将信号发送到挂起的作业以使其打印更多调试信息。
这样做时需要采取哪些安全措施?
有没有其他方法可以从外部改变正在运行的程序的环境?
【问题讨论】:
-
我很困惑。可能其他人也会。
-
问题是,当你打印调试信息时,这个 bug 就消失了,这意味着你的程序调用了未定义的行为,所以调试器会有很大帮助,像 valgrind 这样的内存调试器会更有帮助,而且发布有问题的代码将对可能帮助您的人有所帮助。
-
@iharob 你说的是真的,除了这更有可能是导致死锁的竞争条件而不是内存损坏问题(所以,
helgrind可能而不是valgrind)和描述让我觉得我们在谈论一个非常庞大、复杂的网络守护程序,即使发布一个精简版也不实用。
标签: c linux environment-variables signals