战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  257 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

    最近将代码调整为release版时,碰到这样一个奇怪的错误:直接运行程序,还没有进入main入口时就宕掉。这个exe工程链接过一个公用的静态库和一个底层功能的静态库。在debug版完全没有问题。

    随即开始隔离代码分析,当隔离到一个继承公用静态库时,隔离后不会宕机。这表示静态库与exe之间的链接出了一些问题。再次观察挂掉的地方显示streambuf一类的东西,这是包含在iostream里的东西,继续点击堆栈向上跟踪。结果在wcout.cpp里发现了

__PURE_APPDOMAIN_GLOBAL static wfilebuf wfout(_cpp_stdout);

所有问题迎刃而解,应该是恶心的iostream的静态变量,在多重静态库链接时的错误,导致exe启动,CRT为其分配内存时的宕机。马上屏蔽所有使用过wcout及iostream的所有代码。release版正常运行,不再宕机

posted on 2009-11-11 16:49 战魂小筑 阅读(725) 评论(4)  编辑 收藏 引用 所属分类: 程序调试技术C++/ 编程语言

评论

# re: 一个C++标准库导致的错误 2009-11-11 16:54 AsEngineDev
这个是经验~~~,学习  回复  更多评论
  

# re: 一个C++标准库导致的错误 2009-11-11 18:43 Adrian
stl 已经老得不能再老了 不知道猴年马月才会出像样点的C++标准库  回复  更多评论
  

# re: 一个C++标准库导致的错误[未登录] 2013-02-19 15:55 刘伟
@Adrian
敢说这话的不是大牛就是白痴!
  回复  更多评论
  

# re: 一个C++标准库导致的错误 2013-02-20 07:23 augustheart
这恐怕不是真正的问题,iostream本身还是比较健壮的。
考虑debug和release之间的真正差距是优化,你应该再试试-O0  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理