나는 2 MiB 정도의 꽤 무거운 스택 할당을 한 C 프로그램을 작성했다. 나는 가난한 사람의 IDE를 사용하기 때문에 컴파일 할 때마다 테스트를 위해 make를 통해 자동으로 프로그램을 실행하고있었습니다.프로그램은 make에 의해 실행될 때 실행되지만 쉘을 통해 실행되지는 않습니다 - 말도 안되는 넌센스!
나는 거의 모든 것을 감쌌지만, 어떤 이유로 최종 최적화 과정에서 쉘에서 직접 실행했습니다. 즉시 segfault! make로 계속 실행하면 손으로 실행하면 항상 동일한 segfault가 생성됩니다.
결국 256 KiB로 스택 할당량을 줄여서 문제를 해결했습니다. 내 합리적인 것은 make가 아마도 프로세스를 실행하고 있었기 때문에 더 많은 스택 공간을 사용할 수있는 이상한 매개 변수를 상속 받았다는 것입니다.
모든 것이 이제 괜찮지만 내 이론을 테스트 할 방법이 없습니다. 누구나 확인하거나 거부 할 수 있습니까, 아니면 테스트 방법을 제안 할 수 있습니까?
* zsh을, 정력, GCC, GDB, 일부 열매 메이크
그래, 그랬어! 그것은 'ulimit -s 무제한'이후 쉘에서 직접 작동했습니다. 사람, 성숙한 만들기 프로그램의 경우 다소 심각한 버그처럼 보입니다. (나는 gmake 3.81을 사용하고있다.) 그들에게 친숙한 이메일을 쓰겠다고 생각한다. :-) –
make의 버그 밖에 없다고 생각하지 않는다. make는 아마 high로 설정했다. 무제한) 가치를 부여하며 이는 하위 프로세스에 의해 상속받습니다. – paxdiablo
@pax가 동의했습니다. 그러나 자식 프로세스가 상속하는 환경을 변경하는 것은 여전히 버그입니다. 사람들은 항상 '시험하다'와 같은 일을하고, 그들이 무엇을해도 영향을 미치지 않는다는 사실을 기대합니다. –