找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4826|回复: 6

奇怪的问题。ACE_DEBUG导致程序崩溃

[复制链接]
发表于 2008-10-14 11:10:41 | 显示全部楼层 |阅读模式
第二次遇到这种情况了,可能ace的log框架有些问题。以前还遇到过一条语句输出多个变量内容的时候顺序会错乱的问题。
崩溃的很奇怪,程序中有一行:
    ACE_DEBUG ((LM_DEBUG, "xxxxxx\n"));


注掉就好了。单线程运行的时候也会挂。
 楼主| 发表于 2008-10-14 11:43:08 | 显示全部楼层
我的程序中log是同时输出到stdout和一个文件里的,很多地方都有这样的打印调试log的语句。是不是这样不稳定?现在把LM_DEBUG的级别关掉了,只留了LM_ERROR,暂时没问题了。
发表于 2008-10-14 14:01:21 | 显示全部楼层
肯定是程序的bug。我在比较复杂的线程环境中用过ACE LOG框架,没有问题的。不会出错。
 楼主| 发表于 2008-10-17 14:31:34 | 显示全部楼层
可能是我的程序哪里跟log有冲突。以前都挺好的后来怎么出问题了:L
现在只能把log关了。不然不知道什么时候就会突然崩溃。。。
 楼主| 发表于 2008-10-22 17:20:02 | 显示全部楼层
现在把log的定向到stderr关了:
ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR);
只留下输出到文件的部分:
ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM);
运行了一段时间暂时没发现问题。
 楼主| 发表于 2008-11-9 17:36:33 | 显示全部楼层
在这里有牛人发现了ACE的ACE_Logging_Strategy类中的一个多线程安全问题

http://blog.tom.com/blogger2007/article/1296.html

可惜最后没说怎么解决的。看起来比较复杂。。一时看不动,有空再慢慢理解吧:lol

[ 本帖最后由 wishel 于 2008-11-9 17:45 编辑 ]
发表于 2008-11-22 20:52:07 | 显示全部楼层
ACE_DEBUG是线程安全的,如果在我们的ACE应用程序中是多线程的话,那么每一个线程所应用的ACE_Log_Msg对象是不一样。
ACE_Log_Msg 是每一个线程的专有数据。
ACE_DEBUG 默认是输出在 STDERR的,如果你要把自己的LOG信息输出到OSTREAM或者CALLBACK等。
需要在每一个线程都重新定位。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 08:24 , Processed in 0.016790 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表