HP-UX PA RISC上的64位程序分段故障

时间:2011-03-28 10:57:34

标签: c++ hp-ux

我正在使用3台 HP-UX PA RISC 计算机进行测试。我的二进制文件在一台PA RISC机器上失败了,而其他人正在工作。请注意,即使使用版本检查执行二进制文件,即它只是打印版本并退出并且不执行任何其他操作,仍然二进制文件会给出分段错误。可能是分段错误的可能原因。在一个盒子上找出失败的根本原因对我来说很重要。程序正在开发2 HP-UX,似乎是环境问题?

我试图在测试程序中复制相同的代码片段(即声明变量,打印版本和退出),并使用相同的编译选项进行构建,但它正在运行。这是程序的gdb输出。

$ gdb prg_us
Detected 64-bit executable.
Invoking /opt/langtools/bin/gdb64.
HP gdb 5.4.0 for PA-RISC 2.0 (wide), HP-UX 11.00
and target hppa2.0w-hp-hpux11.00.
Copyright 1986 - 2001 Free Software Foundation, Inc.
Hewlett-Packard Wildebeest 5.4.0 (based on GDB) is covered by the
GNU General Public License. Type "show copying" to see the conditions to
change it and/or distribute copies. Type "show warranty" for warranty/support.
..
(gdb) b  5573
Breakpoint 1 at 0x4000000000259e04: file pmgreader.c, line 5573 from /tmp/test/prg_us.
(gdb) r -v
Starting program: /tmp/test/prg_us -v

Breakpoint 1, main (argc=2, argv=0x800003ffbfff05f8) at pmgreader.c:5573
5573       if (argc ==2 && strcmp (argv[1], "-v") == 0)
Current language:  auto; currently c++
(gdb) n
5575           printf ("%s", VER);
(gdb) n
5576           exit(0);
(gdb) n

Program received signal SIGSEGV, Segmentation fault
  si_code: 0 - SEGV_UNKNOWN - Unknown Error.
0x800003ffbfb9e130 in real_free+0x480 () from /lib/pa20_64/libc.2
(gdb)

可能的原因是什么?为什么它在一个而不在另一个上工作?

2 个答案:

答案 0 :(得分:0)

只需很长时间 - 您是否同时包含stdio.hstdlib.h,以便编译器知道printf()exit()的原型?

实际上,经过一番思考(并注意到C ++在混合中),你可能会有一些静态对象初始化导致问题(可能会破坏堆?)。

不幸的是,看起来PA-RISC不支持valgrind - 你可以在PA-RISC上运行一些类似的工具吗?如果不是,那么在程序的x64版本上运行valgrind可能是值得的,如果设置它并不太困难。

答案 1 :(得分:0)

迈克尔伯尔已经暗示了这个问题:这是一个全球性的对象。

请注意,崩溃来自free函数。这表示内存释放,反过来是析构函数。鉴于上下文,这是有道理的:全局析构函数在exit(0)之后运行。堆栈跟踪将显示更多详细信息。