2012-01-12 4 views
0

현재 Apache2 모듈을 작성하는 방법을 배우기 위해 "The Apache Modules Book"이라는 책을 읽었습니다. 나는이 책에서 몇 가지 예를 시도했는데 한 경우에 나는 완전하게 &을 저자 웹 사이트의 소스 파일을 붙여 넣더라도 세분화 오류를 얻는다.Apache2 모듈의 세그먼트 오류

이 예제는 * .txt 파일에 대한 요청에서 작동하는 출력 필터로, html로 이스케이프 된 요청 된 txt 파일의 내용을 중간에 추가합니다.

소스 코드는 아래에서 볼 수 있습니다 :

[목 1월 12일 20시 38분 1초 2012] [공지] 아이 PID 3500 종료 신호 : http://apache.webthing.com/mod_txt/

아파치의 로그 파일에 오류 다음이다

: 분할 오류가

(11)

나는 다음 명령을 사용하여 모듈을 설치

apxs2를 사용할 때 컴파일 오류가 없습니다.

LoadModule txt_module /usr/lib/apache2/modules/mod_txt.so 
AddOutputFilter text-filter .txt 
AddType text/html .txt 
TextHeader /home/robert/header.txt 
TextFooter /home/robert/footer.txt 

코드 문제 있나요 아니면 필터를 구성/comiling/설치에 뭔가를하고있는 중이 야 다음과 같이

나는 httpd.conf 파일에 필터를 추가?

내 시스템 : 기본 Ubuntu 저장소에서 Apache 2.2.14가 설치된 Ubuntu Lucid Lynx 10.04.3.

나는 이것에 대한 어떤 힌트도 정말로 감사 할 것입니다!

미리 감사드립니다.

안부, 로버트

[편집] 몇 가지 추가 정보 :

내가 segfault의 발생 위치에 대한 좀 더 많은 정보를 얻기 위해 GDB를 사용했다. 정확한 회선 번호를 얻을 수있는 방법이 있습니까? 아파치 모듈

Program received signal SIGSEGV, Segmentation fault. 
[Switching to Thread 0xab472b70 (LWP 4041)] 
0xb7d3fb9b in txt_filter() from /usr/lib/apache2/modules/mod_txt.so 
(gdb) bt 
#0 0xb7d3fb9b in txt_filter() from /usr/lib/apache2/modules/mod_txt.so 
#1 0x00154150 in ap_pass_brigade (next=0x2e3198, bb=0xb7f4fff4) 
    at /build/buildd/apache2-2.2.14/server/util_filter.c:526 
#2 0x00141147 in default_handler (r=0x2e4ea8) 
    at /build/buildd/apache2-2.2.14/server/core.c:3757 
#3 0x00148321 in ap_run_handler (r=0x2e4ea8) 
    at /build/buildd/apache2-2.2.14/server/config.c:159 
#4 0x0014c107 in ap_invoke_handler (r=0x2e4ea8) 
    at /build/buildd/apache2-2.2.14/server/config.c:373 
#5 0x0015b6b8 in ap_process_request (r=0x2e4ea8) 
    at /build/buildd/apache2-2.2.14/modules/http/http_request.c:282 
#6 0x001581e8 in ap_process_http_connection (c=0x2defd0) 
    at /build/buildd/apache2-2.2.14/modules/http/http_core.c:190 
#7 0x00150b91 in ap_run_process_connection (c=0x2defd0) 
    at /build/buildd/apache2-2.2.14/server/connection.c:43 
#8 0x0016249b in process_socket (thd=0x2a7958, dummy=0x2dda00) 
    at /build/buildd/apache2-2.2.14/server/mpm/worker/worker.c:544 
#9 worker_thread (thd=0x2a7958, dummy=0x2dda00) 
    at /build/buildd/apache2-2.2.14/server/mpm/worker/worker.c:894 
#10 0xb7f781e1 in ??() from /usr/lib/libapr-1.so.0 
#11 0xb7f3f96e in start_thread() from /lib/tls/i686/cmov/libpthread.so.0 
#12 0xb7eada4e in clone() from /lib/tls/i686/cmov/libc.so.6 
+1

왜 apxs2 -c로 컴파일하려고하지 않습니까? -wc, -g3 mod_txt.c : seg 오류 덤프 파일에서 좀 더 자세한 정보를 얻습니다. – Boris

답변

1

더 전문 디버깅 튜토리얼은 당신이 읽고있는 책 (12 장)에서 찾아 볼 수있다 :

이 출력됩니다.

현재 Ubuntu Lucid Lynx에서 동일한 하드웨어/소프트웨어 구성 (Apache 2.2.14)을 실행 중이며 모듈을 성공적으로 컴파일/실행했습니다.

폴더에서/var/www/HTML 문서를 넣었지만 확장자를 .txt로 변경하고 내 브라우저 (localhost/some-html.txt) 및 출력 (태그에 따라 다름)을 통해 액세스했습니다. 내 머리말과 꼬리말 파일에 <pre></pre> 태그를 사용했기 때문에 머리말 및 꼬리말 파일에 넣었습니다.)