2013-11-27 33 views
1

我有一个C++应用程序,它在AIX机器上以特定输入数据的“错误分配”错误消息终止。使用dbx捕获AIX上的C++异常

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

回答

5

如果您的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

+0

非常感谢你的第4行抛出,它的作品!我知道它会是这样的,但不知道该函数的名称... __DoThrowV6不是一个易于猜测的名称;-) – piokuc

+0

我们的调试器具有GUI:(IBM Debugger for AIX,包含在XL C/C++ for AIX; IBM Rational Developer for AIX和Linux)都包含了更简单的选项,以便在引发C++异常时停止调试对象。 –

+0

我们如何运行'IBM Debugger for AIX' - 什么是二进制文件? – JBRWilkinson