如题,当不是用try...exception机制时,想在程序出错处取得其源文件名和行号,以便在抛出错误信息中包含这些信息,如何做?VC++中有宏_FILE_,_LINE_可以实现。

解决方案 »

  1.   

    这个高手已经在这个帖子里说了查找方法
    http://community.csdn.net/Expert/TopicView.asp?id=3601416
    但是,用程序来控制,俺也不知道,期待
      

  2.   

    用程序來控制..NND 我在繁體打字實在慢....用 TRY EXCEPT END + ASSERT比如try
      Open; // 如果這一行出現異常 那麼就到了except
    except
      on E:exception do
      begin
        ASSERT(False); // 那麼 這就會出現 行數了...不過行數會有誤差.<行數還要自己解析>
        ShowMessage(E.Message); // 兩者結合 就知道 行數,文件名 && 出錯信息
      end;
    end;偶 就是這麼做的 很早的時候我好像發了一個帖 沒找到方法  就自己這麼將就著處理了...
      

  3.   

    有没有不用try机制能实现的?
    比如我写的一个返回类型为bool函数,在另外一个地方调用它,如果它返回false,我就要添加一个出错信息到错误消息里,这个出错信息包含源文件名和行数。
      

  4.   

    呵呵 如果是你這樣的需求 我也想知道...vc++裡面的 這些宏 也只有通過ASSERT這樣的宏才有實際意義的 但是向你這樣統一處理 我覺得不太可能 因為這些宏 是獲的某一行的行數,但是你怎麼獲的任意<出錯>行的行數呢?? 總要有一個事件之類的去觸發....你先考慮以下你的模型..
      

  5.   

    vc++里这样处理没有什么问题,我的同事写的一个parser里就是这样用的。他写了一个logger类,用一个vector<string>做存储错误消息的数据结构,主程序中实例化这个类为对象,作为参数传入各个函数中,然后调用每个返回型为bool的函数时,如果返回值为false,就输出一条信息到logger中,在程序返回主程序中,输出logger中的错误信息到控制台。所以我想知道delphi里有没有类似的处理办法。
      

  6.   

    vc++里这样处理没有什么问题,我的同事写的一个parser里就是这样用的。他写了一个logger类,用一个vector<string>做存储错误消息的数据结构,主程序中实例化这个类为对象,作为参数传入各个函数中,然后调用每个返回型为bool的函数时,如果返回值为false,就输出一条信息到logger中,在程序返回主程序中,输出logger中的错误信息到控制台。所以我想知道delphi里有没有类似的处理办法。
    -------------------------------------------
    你这可以获得到出错的准确行么你这样操作应该是可以获得大致的而已
    除非你把__LINE__等传出
      

  7.   

    提示一点,未必有理:try机制固然好,C++中也有try机制,但是也要注意,try机制的不可移植性,不同的编译器,try的具体实现不一致,有的甚至就没有。
      

  8.   

    呵呵  __LINE__還只是MFC的東西呢...可以获得输出行号的行,也就是大致行,很容易根据大致行找到准确行。這樣了...還有身麼話說...