首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++ 怎么查看错误报错信息

2014-01-22 
c++ 如何查看异常报错信息问题描述:1原来做java的,java出了异常,控制台会有输出c++异常直接就崩掉了(程序

c++ 如何查看异常报错信息
问题描述:

1
原来做java的,java出了异常,控制台会有输出
c++异常直接就崩掉了(程序卡死,退出)

2
c++中我调用的ogre的代码(dll库),调用部分发生了异常,暂时无法查看dll库源码


问题:


我如何知道我的程序到底出了什么错误


c++的异常是否都需要自己定义
[解决办法]
对方dll库有pdb吗?如果直接debug卡的话,那么在出异常的时候,用调试器attach进去看。
[解决办法]
C++之父谈异常处理时的原话:

low-level events, such as arithmetic overflows and divide by zero, are assumed to be handled by a dedicated lower-level mechanism rather than by exceptions. This enables C++ to match the behaviour of other languages when it comes to arithmetic. It also avoids the problems that occur on heavily pipelined architectures where events such as divide by zero are asynchronous

异常是为了捕捉自己知道,但又无能为力的情况才设计出来的,比如硬盘满了,并发问题等等。但很多程序员却滥用异常,将所有的错误验证都交由异常来处理是很有问题的。逻辑错误就是错误,你不好好的改善程序,却靠异常捕捉来避免这类问题,你觉得合适么?虽然现在的异常在没有发生前是0花费,但一旦发生异常比if-else要花更多的时间。如果这个异常的命中率很高,那系统不是不要用了?

前两天看到条新闻,去年全球黑客破解92%都来自于Java。可以说Java很热门,但从另一方面也可以说大部分Java程序员素质很低,从异常这一点就可以看出很多问题。
[解决办法]
补充一句,如果抛出的异常类是从标准异常里派生的,那么可以用what()成员函数来输出错误信息。比如:

#include <bitset>
#include <iostream>
#include <typeinfo>

using namespace std;

int main( )
{
   try 
   {
      bitset< 33 > bitset;
      bitset[32] = 1;
      bitset[0] = 1;
      unsigned long x = bitset.to_ulong( );
   }
   catch ( exception &e ) 
   {
      cerr << "Caught " << e.what( ) << endl;
      cerr << "Type " << typeid( e ).name( ) << endl;
   };
}

[解决办法]
C++ 有提供异常。如8楼的。 如果没有源码,只有DLL,调不到的,如果你汇编很牛B就另说。如果有DLL,又调试信息文件pdb,可以看到调用的函数名称参数和返回值。还是把源码,搞进来吧,同学
[解决办法]
有源码可以调,try catch是可以用的
[解决办法]
抓程序core dump的文件,然后分析什么原因导致程序崩溃的!

微软有几个工具可以使用,我就用过windbg来调试程序的!

热点排行