Stay Hungry.Stay Foolish.
常驻内存程序之猥琐的调试技巧

分享一个自己摸索出来的调试技巧

场景

写常驻内存程序的时候,下面说说我遇到的一些场景:

场景1:我们大部分时间会在内存里面维护哈希表这种数据结构来临时存储一些数据,有一个线程不断的往里面塞数据,另外的线程不断的取数据消费,如果取数据的线程遇到非预期的情况,部分数据并没有被消费掉,内存就会越来越大,直到OOM,关键是我们还束手无策,我们很期望可以注入到进程里面去看看数据结构里面的数据是啥样的数据,为啥没有像预期的那样被消费掉。

场景2: 写了一个线程监听某个特别事件发生的时候才会执行的一段代码,这段代码使用的数据又依赖于程序运行一段时间之后我们不能单独拿出来独立执行测试,我们又想提前看看执行的效果。

调试

下面就是我们今天的主角信号signal,我们可以使用自定义信号量SIGUSR1,使用python举例,在主进程位置signal.signal(signal.SIGUSR1, signal_handler)增加信号事件,信号处理函数可以这么写, 当进程接受到SIGUSR1信号的时候,我们把数据结构里面的内容写到log里面。

def signal_handler(signum, frame):
    with open("test.log", "a+") as f:
        f.write(dict)
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
评论

暂无评论~~