ACE 开发者
文章
日志
文件
圈子
论坛
业内新闻
意见建议
求职招聘
.Net技术
项目管理经验交流
常用工具
IBM Rational
敏捷技术
数据库
中间件
P2P技术
服务器端程序开发
Tcp/IP和Socket
C++学习
开发心得和读书笔记
ACE综合应用
ACE基础应用
海阔天空
您的位置:
ACE 开发者
>>
论坛
>>
ACE基础应用
>>
查看帖子
字体:
小
中
大
奇怪的问题。ACE_DEBUG导致程序崩溃
wishel 发表于: 2008-10-14 11:10 来源:
ACE 开发者
第二次遇到这种情况了,可能ace的log框架有些问题。以前还遇到过一条语句输出多个变量内容的时候顺序会错乱的问题。
崩溃的很奇怪,程序中有一行:
ACE_DEBUG ((LM_DEBUG, "xxxxxx\n"));
注掉就好了。单线程运行的时候也会挂。
最新回复
wishel at 2008-10-14 11:43:08
我的程序中log是同时输出到stdout和一个文件里的,很多地方都有这样的打印调试log的语句。是不是这样不稳定?现在把LM_DEBUG的级别关掉了,只留了LM_ERROR,暂时没问题了。
winston at 2008-10-14 14:01:21
肯定是程序的bug。我在比较复杂的线程环境中用过ACE LOG框架,没有问题的。不会出错。
wishel at 2008-10-17 14:31:34
可能是我的程序哪里跟log有冲突。以前都挺好的后来怎么出问题了
现在只能把log关了。不然不知道什么时候就会突然崩溃。。。
wishel at 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);
运行了一段时间暂时没发现问题。
wishel at 2008-11-09 17:36:33
在这里有牛人发现了ACE的ACE_Logging_Strategy类中的一个多线程安全问题
http://blog.tom.com/blogger2007/article/1296.html
可惜最后没说怎么解决的。看起来比较复杂。。一时看不动,有空再慢慢理解吧
[
本帖最后由 wishel 于 2008-11-9 17:45 编辑
]
newzai at 2008-11-22 20:52:07
ACE_DEBUG是线程安全的,如果在我们的ACE应用程序中是多线程的话,那么每一个线程所应用的ACE_Log_Msg对象是不一样。
ACE_Log_Msg 是每一个线程的专有数据。
ACE_DEBUG 默认是输出在 STDERR的,如果你要把自己的LOG信息输出到OSTREAM或者CALLBACK等。
需要在每一个线程都重新定位。
查看全部回复
我也来说两句
最新更新主题
ACE_HEX_DUMP的内存泄露
ACE udp绑定ip失败
schedule_timer()向反应器注册问题...
ACE_Message_Block链表是不是在多线程...
关于ACE_NTRACE的问题
编译Hello World出现的问题
[求助] ACE_Message_Block 的 release...
ACE_Asynch_Acceptor 内存泄露
关于proactor问题
关于ACE_Message_Block自动析构的问题...
月度关注热点
ACE_Asynch_Acceptor 内存泄露
ACE在Linux 下编译的奇怪问题....
关于proactor问题
ACE_WIN32_Proactor
[求助] ACE_Message_Block 的 release...
关于Proactor的异步问题。
关于ACE_Message_Block自动析构的问题...
关于日志策略ACE_Logging_Strategy使用...
ACE_Message_Block链表是不是在多线程...
关于调试ACE_Proactor的程序
最新回复
现在只能把log关了。不然不知道什么时候就会突然崩溃。。。
ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR);
只留下输出到文件的部分:
ACE_LOG_MSG->set_flags (ACE_Log_Msg::OSTREAM);
运行了一段时间暂时没发现问题。
http://blog.tom.com/blogger2007/article/1296.html
可惜最后没说怎么解决的。看起来比较复杂。。一时看不动,有空再慢慢理解吧
[ 本帖最后由 wishel 于 2008-11-9 17:45 编辑 ]
ACE_Log_Msg 是每一个线程的专有数据。
ACE_DEBUG 默认是输出在 STDERR的,如果你要把自己的LOG信息输出到OSTREAM或者CALLBACK等。
需要在每一个线程都重新定位。