【问题标题】:Catch C++ exceptions on AIX with dbx使用 dbx 在 AIX 上捕获 C++ 异常
【发布时间】:2013-12-13 06:13:28
【问题描述】:

我有一个 C++ 应用程序,它以 AIX 机器上的某些输入数据的“错误分配”错误消息终止。

有没有办法在 dbx 中运行程序并在抛出异常时捕获它?我在 IBM 的文档中没有看到任何关于它的内容。

【问题讨论】:

    标签: c++ debugging aix dbx bad-alloc


    【解决方案1】:

    如果您的 C++ 应用程序是使用 XL C/C++ 编译的,请在 __DoThrowV6 上设置断点。

    $ cat throw.C
    int foo(int x)
    {
       if (x < 0)
          throw 99;
       return x+1;
    }
    
    int main()
    {
       int y;
       y = -5;
       try
       {
         foo(y);
       }
       catch(...)
       {
       }
       return 0;
    }
    
    $ xlC -g -o throw throw.C
    
    $ dbx ./throw
    Type 'help' for help.
    reading symbolic information ...
    (dbx) stop in __DoThrowV6
    [1] stop in __DoThrowV6
    (dbx) run
    [1] stopped in __DoThrowV6 at 0xd1be7e00
    0xd1be7e00 (__DoThrowV6)    7c0802a6        mflr   r0
    (dbx) where
    __DoThrowV6() at 0xd1be7e00
    foo(int)(x = -5), line 4 in "throw.C"
    main(), line 14 in "throw.C"
    (dbx)
    

    __DoThrowV6 是在抛出异常时调用的,所以从调用栈中可以看出异常是从源文件 throw.C 的第 4 行抛出的

    【讨论】:

    • 非常感谢,它有效!我知道它会是这样的,但不知道函数的名称...... __DoThrowV6 不是一个容易猜到的名字 ;-)
    • 我们的带有 GUI 的调试器:(IBM Debugger for AIX,包含在 XL C/C++ for AIX 中;IBM Rational Developer for AIX 和 Linux)都包含更简单的选项,可以在 C++ 时停止调试对象抛出异常。
    • 我们如何运行“IBM Debugger for AIX”——二进制文件叫什么?
    猜你喜欢
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    相关资源
    最近更新 更多