- 浏览: 1477757 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
目标:打印nginx执行之后的流程方法
my_debug.c
my_debug.h
cp my_debug.c my_debug.h ../nginx-1.5.6/src/core/
vim ../nginx-1.5.6/src/core/nginx.c
configure之后修改objs/Makefile
make &&make install 之后
启动
./nginx
得到
/data/haoning/mygit/mynginxmodule/nginx_release/debug/my_debug.log
编写处理脚本
addr2line.sh
./addr2line.sh /usr/local/nginx_sendfile/sbin/nginx my_debug.log a.log
生成a.log为所要的结果
类似如下
附件中a.log.jpg 重命名为a.log查看具体内容
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.\n"); \ 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\n%p\n%p\n",call,this); } void __cyg_profile_func_exit( void *this,void *call ) { my_debug_print("exit\n%p\n%p\n",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之后修改objs/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查看具体内容
- a.log.jpg (660.9 KB)
- 下载次数: 3
发表评论
-
ios的safari使用自制ca证书测试webrtc
2018-08-20 13:31 2441这个需要注意 https://stackoverflow.c ... -
nginx push_upstream模块的websocket
2018-05-04 23:27 1220参考 https://www.rails365.net/art ... -
openresty聊天室的helloworld
2018-04-22 19:25 799openresty的websocket + redis的sub ... -
openresty websocket
2018-04-18 17:08 1519mac安装openresty brew install o ... -
nginx模块开发(三)upstream模块
2017-08-20 23:48 844使用nginx-1.13.4版本 三个文件ngx_http_ ... -
nginx模块开发(二) 使用gdb-dashboard调试
2017-08-11 18:47 2010gdb-dashboard或者 gdbgui 或者gdb自带 ... -
nginx模块开发(一)
2017-07-29 22:44 565决定重新整理nginx模块开发 helloworld con ... -
nginx带进度条的上传超大文件
2016-12-12 18:40 387311年写的 http://haoningabc.iteye.c ... -
nginx rewrite替代apache rewrite
2016-10-18 20:30 834清理chrome的缓存 chrome://appcache-i ... -
ffmpeg+nginx 的直播(2,直播摄像头和麦克风)
2016-05-28 20:21 4359假设我的服务器是centos7 192.168.139.117 ... -
ffmpeg+nginx 的直播(1,直播播放的视频文件)
2016-05-26 17:11 659364位操作系统centos7 ############ 1.一 ... -
graphviz绘制nginx函数调用图
2014-04-14 18:43 1465以下是c的版本 c++代码去 http://www.cnblo ... -
nginx的远程调用模块
2014-03-24 14:31 2769在tx工作的时候,自己的虚拟机总是连接不上,公司封了ssh端口 ... -
通过nginx远程执行shell
2014-03-03 10:26 5087saltstack远程执行shell,远程管理等返回json已 ... -
nginx的upstream模块
2014-01-17 17:37 3204参考http://nginx.weebly.com/31034 ... -
nginx调试日志的几种方法
2013-10-17 22:54 23315最简单的方式就是 fprintf(stderr, &qu ... -
nginx HttpSecureLinkModule 过期token验证模块
2012-11-07 02:15 6085用途,确认一个链接比如下载pdf,在一定有效期内有用 可以加 ... -
nginx 上传进度条
2012-11-01 16:24 7611费劲周折,一晚上终于搞定了,nginx版本1.38 ----- ... -
ubuntu装openrestry
2012-03-01 00:16 1333apt-get install make apt-get in ... -
udp的socket的helloworld
2011-12-07 00:56 1101来自百度 [root@red54apple test]# ...
相关推荐
Nginx是一个高性能的Web服务器和...这个流程确保了Nginx能够高效、稳定地处理各种请求,同时提供了强大的功能扩展性。通过组合和配置不同的模块,Nginx可以满足从简单的静态文件服务器到复杂的应用服务器的各种需求。
3. **编译源码**:执行`make`命令,这将根据Makefile编译源代码,生成可执行文件`nginx`。所有源代码位于`src`目录下,其中`src/core`、`src/event`、`src/http`等子目录分别对应核心功能、事件处理、HTTP服务器等...
### Nginx安装全流程 Nginx是一款高性能的HTTP服务器及反向代理服务软件,它在互联网领域扮演着至关重要的角色。本文将详细介绍Nginx的安装全流程,涵盖安装前的准备、安装步骤、配置流程以及如何实现开机自启动。 ...
Nginx是一款高性能的HTTP和反向代理服务器,广泛用于网站的负载均衡和内容分发。...在实际应用中,要特别注意避免重写规则引起的循环和不必要的重定向,以及合理利用各种标志来控制规则的执行流程。
在这个过程中,Nginx会检查每个请求头,将其存储到内存中,并执行相应的处理。 1. 缓冲区管理:当缓冲区中没有足够的空间存储新请求头时,`ngx_http_process_request_headers()`会分配更大的缓冲区。如果客户端发送...
lua-resty是Nginx的Lua接口,用于在Nginx内部执行Lua脚本。为了集成lua-resty,首先需要安装OpenResty,它是一个预编译的Nginx发行版,集成了lua-nginx-module和其他相关模块。 1. 获取OpenResty源码包,如`...
### 搭建Nginx的操作流程详解 #### 一、Nginx简介与特性 Nginx(发音为 "engine X")是一款开源的Web服务器软件,它以高性能、稳定性和低资源消耗著称。Nginx不仅能够提供HTTP服务,还可以作为反向代理、负载均衡...
提供预编译的ARM64 Nginx版本,用户可以直接解压到服务器上,避免了编译过程中的依赖问题和配置错误,简化了部署流程。 5. **使用和配置Nginx** 解压后,将Nginx二进制文件放置到适当目录(如`/usr/local/nginx/...
以下是一个详细的Nginx升级流程: 1. **停止Nginx服务** 在升级前,首先需要安全地关闭正在运行的Nginx服务,以避免数据丢失或冲突。这可以通过执行`pkill nginx`来实现,该命令会终止所有与nginx相关的进程。 2....
总之,`nginx-conf-watcher`是一个实用的Windows工具,它能帮助我们自动化Nginx配置文件的更新流程,让Nginx始终保持最新的配置状态,提高了运维的便利性和响应速度。在使用过程中,理解其工作原理并适当定制以适应...
4. **编译前准备**:进入解压后的目录,例如 `cd nginx-1.17.6`,然后根据系统需求执行必要的配置命令,例如 `./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module`,这...
本资源提供的是 Nginx 的 1.24.0 版本,它是一个预编译好的二进制包,无需进行编译安装,简化了部署流程。 **安装与部署** 1. 首先,将提供的 `nginx.zip` 文件解压缩到你希望 Nginx 运行的目录下,例如 `/usr/...
由于这是升级过程,不执行`make install`,而是备份旧的Nginx执行文件: ```bash mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old ``` 将新编译的Nginx复制到相应目录: ```bash cd objs/ cp ...
本安装包为nginx-1.21.6版本,是Nginx的最新稳定版,适用于Linux、Windows等多种操作系统平台。 Nginx的核心功能包括: 1. **静态资源处理**:Nginx擅长处理静态文件,如HTML、CSS、JavaScript、图片等,通过缓存...
在处理静态资源请求时,Nginx提供了一个非常实用的指令——`try_files`,它允许我们定义在找不到指定文件时执行的后续操作,比如重定向或者执行特定的URI。本文将深入探讨`try_files`命令在Nginx中的应用,以及如何...
以下是一个基本的Nginx安装Shell脚本流程: 1. **检查系统信息**:脚本首先会获取Linux发行版和版本信息,例如使用`lsb_release -a`或`cat /etc/os-release`命令。这一步确保脚本可以根据不同的系统环境进行适配。 ...
在了解了Nginx的基本概念和操作流程后,你将能够更好地管理和优化你的Web服务器,提升网站的性能和稳定性。记住,Nginx的灵活性和可扩展性使得它在各种复杂环境中都能发挥出色的作用,是现代Web服务不可或缺的一部分...
以上知识点涵盖了通过LNMP安装环境进行Nginx的重新编译和伪装的完整流程,包括源代码修改、编译参数的指定、配置文件的修改以及服务的重启和验证。掌握了这些知识点后,就可以根据需要对Nginx进行定制化的伪装设置,...
通过本文的介绍,我们可以了解到在Windows环境下部署Nginx的基本流程和配置方法。Nginx不仅可以作为高性能的Web服务器,还可以实现负载均衡、反向代理等多种功能,非常适合用于处理高流量的网站。对于希望降低成本...
请求处理流程 当 Nginx 收到一个请求时,会按照以下步骤处理: 1. **接受连接**:工作进程通过事件处理器接受新连接。 2. **预处理**:解析请求头,检查请求合法性。 3. **路由匹配**:根据请求的 URI 和配置文件...