테스트를 위해 3 HP-UX PA RISC 기계를 사용 중입니다. 내 바이너리가 다른 PA RISC 시스템에서 작동하지 않습니다. 바이너리가 버전 확인으로 실행 되더라도 버전을 출력하고 종료하고 다른 작업을 수행하지 않더라도 여전히 바이너리가 세그먼테이션 오류를 제공합니다. 세그멘테이션 오류의 원인은 무엇입니까? 하나의 상자에서 오류의 근본 원인을 찾는 것이 중요합니다. 프로그램이 2 HP-UX에서 작동하기 때문에 환경 문제가있는 것 같습니다.HP-UX PA RISC에서 64 비트 프로그램 세그먼트 화 오류
테스트 프로그램에서 동일한 코드 조각 (예 : 변수 선언, 버전 인쇄 및 종료)을 복사하고 동일한 컴파일 옵션을 사용하여 빌드했지만 작동 중입니다. 다음은 프로그램의 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)
가능한 원인은 무엇입니까? 왜 다른 회사가 아닌 다른 회사에서 일하고 있습니까?
관련 코드 중 일부를 게시해야합니다. 메인 라인의 시작부터 문제 라인을 넘어선 몇 줄까지. –
@Paul : 실제 코드는 더 크다. 이 경우, main 함수가 시작될 때 prog가 -v 인수로 호출되는지 여부를 확인하고, 예이면 VER을 출력하고 종료합니다. 이것은 HP-UX PA RISC를 포함한 모든 유닉스 환경에서 작동하지만 하나의 HP-UX PA RISC 시스템에서는 실패합니다. – Sach
스택 추적이 필요합니다. 그것은 당신에게 대답을 말할 것입니다. 기본적으로 그래픽 디버거를 사용하면 훨씬 쉽게 될 것입니다. 이미 설치되어있을 것입니다. 그렇지 않다면 Emacs는 작업을 수행하는 작업을 수행합니다. – Ben