nginx 실행 프로 세 스
my_debug.c
cat my_debug.c
#include "my_debug.h"
#define MY_DEBUG_FILE_PATH1 "/usr/local/nginx_sendfile/sbin/trace.txt"
#define MY_DEBUG_FILE_PATH "/data/haoning/mygit/mynginxmodule/nginx_release/debug/my_debug.log"
int _flag=0;
#define open_my_debug_file() \
(my_debug_fd=fopen(MY_DEBUG_FILE_PATH,"a"))
#define close_my_debug_file() \
do { \
if (NULL != my_debug_fd) { \
fclose(my_debug_fd); \
} \
}while(0)
#define my_debug_print(args,fmt...) \
do{ \
if (0 == _flag) { \
break; \
} \
if (NULL == my_debug_fd && NULL == open_my_debug_file()) { \
printf("Err: can not open output file.
"); \
break; \
} \
fprintf(my_debug_fd,args,##fmt); \
fflush(my_debug_fd); \
}while(0)
void enable_my_debug( void )
{
_flag = 1;
}
void disable_my_debug( void )
{
_flag = 0;
}
int get_my_debug_flag( void )
{
return _flag;
}
void set_my_debug_flag( int flag )
{
_flag = flag;
}
void main_constructor( void )
{
//do nothing
}
void main_destructor( void )
{
close_my_debug_file();
}
void __cyg_profile_func_enter( void *this,void *call )
{
my_debug_print("enter
%p
%p
",call,this);
}
void __cyg_profile_func_exit( void *this,void *call )
{
my_debug_print("exit
%p
%p
",call,this);
}
my_debug.h
#ifndef MY_DEBUG_LENKY_H
#define MY_DEBUG_LENKY_H
#include <stdio.h>
void enable_my_debug( void ) __attribute__((no_instrument_function));
void disable_my_debug( void ) __attribute__((no_instrument_function));
int get_my_debug_flag( void ) __attribute__((no_instrument_function));
void set_my_debug_flag( int ) __attribute__((no_instrument_function));
void main_constructor( void ) __attribute__((no_instrument_function,constructor));
void main_destructor( void ) __attribute__((no_instrument_function,destructor));
void __cyg_profile_func_enter( void *,void * ) __attribute__((no_instrument_function));
void __cyg_profile_func_exit( void *,void * ) __attribute__((no_instrument_function));
#ifndef MY_DEBUG_MAIN
extern FILE *my_debug_fd;
#else
FILE *my_debug_fd;
#endif
#endif
cp my_debug.c my_debug.h ../nginx-1.5.6/src/core/
vim ../nginx-1.5.6/src/core/nginx.c
11 #include <nginx.h>
12 #include "my_debug.h"
.....
204 main(int argc, char *const *argv)
205 {
206 enable_my_debug();
configure 후 obj / Makefile 수정
CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -finstrument-functions
...
18 CORE_DEPS = src/core/nginx.h \
19 src/core/my_debug.h \
.....
84 HTTP_DEPS = src/http/ngx_http.h \
85 src/core/my_debug.h \
....
105 objs/nginx: objs/src/core/nginx.o \
106 objs/src/core/my_debug.o \
......
216 $(LINK) -o objs/nginx \
217 objs/src/core/nginx.o \
218 objs/src/core/my_debug.o \
......
331 objs/src/core/my_debug.o: $(CORE_DEPS) src/core/my_debug.c
332 $(CC) -c $(CFLAGS) $(CORE_INCS) \
333 -o objs/src/core/my_debug.o \
334 src/core/my_debug.c
make & & make install 이후
시동 을 걸다
./nginx
얻다
/data/haoning/mygit/mynginxmodule/nginx_release/debug/my_debug.log
처리 스 크 립 트 작성
addr2line.sh
#!/bin/sh
if [ $# != 3 ]; then
echo 'Usage: addr2line.sh executefile addressfile functionfile'
exit;
fi;
echo "begin"
cat $2 |while read line
do
if [ "$line" = 'enter' ]; then
read line1
read line2
# echo $line >> $3
addr2line -e $1 -f $line1 -s >>$3
echo "--->" >> $3
addr2line -e $1 -f $line2 -s | sed 's/^/ /' >> $3
echo >> $3
elif [ "$line" = 'exit' ]; then
read line1
read line2
addr2line -e $1 -f $line2 -s | sed 's/^/ /' >> $3
echo "<---" >> $3
addr2line -e $1 -f $line1 -s >> $3
# echo $line >> $3
echo >> $3
fi;
done
echo "end"
./addr2line.sh /usr/local/nginx_sendfile/sbin/nginx my_debug.log a.log
필요 한 결과 로 a. log 생 성
유사 하 다
main
nginx.c:216
--->
ngx_strerror_init
ngx_errno.c:47
ngx_strerror_init
ngx_errno.c:47
<---
main
nginx.c:216
??
??:0
--->
main
nginx.c:205
main
nginx.c:205
<---
??
??:0
main
nginx.c:280
--->
ngx_time_init
ngx_times.c:61
ngx_time_init
ngx_times.c:69
--->
ngx_time_update
ngx_times.c:75
ngx_time_update
ngx_times.c:116
--->
ngx_gmtime
ngx_times.c:284
ngx_gmtime
ngx_times.c:284
<---
ngx_time_update
ngx_times.c:116
첨부 파일 의 a. log. jpg 이름 을 a. log 로 바 꾸 어 구체 적 인 내용 을 봅 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.