奇怪的问题。ACE_DEBUG导致程序崩溃
第二次遇到这种情况了,可能ace的log框架有些问题。以前还遇到过一条语句输出多个变量内容的时候顺序会错乱的问题。崩溃的很奇怪,程序中有一行:
ACE_DEBUG ((LM_DEBUG, "xxxxxx\n"));
注掉就好了。单线程运行的时候也会挂。 我的程序中log是同时输出到stdout和一个文件里的,很多地方都有这样的打印调试log的语句。是不是这样不稳定?现在把LM_DEBUG的级别关掉了,只留了LM_ERROR,暂时没问题了。 肯定是程序的bug。我在比较复杂的线程环境中用过ACE LOG框架,没有问题的。不会出错。 可能是我的程序哪里跟log有冲突。以前都挺好的后来怎么出问题了:L
现在只能把log关了。不然不知道什么时候就会突然崩溃。。。 现在把log的定向到stderr关了:
ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR);
只留下输出到文件的部分:
ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM);
运行了一段时间暂时没发现问题。 在这里有牛人发现了ACE的ACE_Logging_Strategy类中的一个多线程安全问题
http://blog.tom.com/blogger2007/article/1296.html
可惜最后没说怎么解决的。看起来比较复杂。。一时看不动,有空再慢慢理解吧:lol
[ 本帖最后由 wishel 于 2008-11-9 17:45 编辑 ] ACE_DEBUG是线程安全的,如果在我们的ACE应用程序中是多线程的话,那么每一个线程所应用的ACE_Log_Msg对象是不一样。
ACE_Log_Msg 是每一个线程的专有数据。
ACE_DEBUG 默认是输出在 STDERR的,如果你要把自己的LOG信息输出到OSTREAM或者CALLBACK等。
需要在每一个线程都重新定位。
页:
[1]