ACL 应用速记

2019-04-16  本文已影响0人  michael_jia

Visual Studio Code

ACL 入门

typeinfo for InterfaceWaBasePack
常见原因是虚函数未定义
标记为 inline 的函数,编译时优化掉了,也会报告 undefined symbol。

GDB 调试

命令(快捷) 含义 备注
run(r) <args> 执行被调试的程序,自动在第一个断点处暂停执行。 args 是运行参数。也可以通过 set args 命令设置
load 不退出gdb,重新加载执行文件 当你重新编译代码后,比如动态库,使用该命令重新加载。
break(b) 在源代码指定处设置断点,设置后也可清除断点 b 14 表示在当前文件的14行设置断点。
b filename:linenum 表示在文件行设置断点。
b A::f 表示在类 A 的 f 函数断点。
b filename:function 表示在文件函数设置断点。
clear / delete clear 清除当前断点 delete 清除所有断点
next (n) 执行当前语句,然后到下一个语句 遇到函数调用,不会进入函数内部。
step(s) 执行当前语句,遇有调用函数,进入函数内部。 如果函数参数是一条语句,则也会进入函数参数。
return 立即结束当前正在执行的函数 停止执行当前函数剩余部分,立即返回指定值。
finish(fin) finish: Step out of current function with GDB. Continue running until just after function in the selected stack frame returns. Print the returned value (if any).
continue(c) 继续执行 继续执行直至遇到下一个断点或程序结束
print(p) 打印指定变量的值。
类似:display,区别在于 display 在每个命令后都会执行一次,在需要持续关注某变量时相当有用。
p ret 表示打印 ret 变量值。
若出现 <optimized out> 则需要设置 编译优化选项:在编译时 CFLAGS 指定 -O0不优化。
frame(f) 显示当前行
where 显示调用堆栈
info source 显示当前源文件的相关信息 info sources 全部文件
dir <dirname> 指定源文件目录

strace

tui mode

define hook-next
  refresh
end

部署运维

100:2; 102:3; 103:4,其含义是日志将会记录类别为 100 的所有级别值小于2、类别为 101 的所有级别值小于 3 以及类别为 103 的所有级别值小于 4 的日志信息。关于记录类别需要注意:类别值最好是 >= 100,且 < 1000(当使用 acl_debug_init2 初始化时只要类别值 >= 100 即可,因为第二个参数指定了最大类别值),这是因为 acl 库内部一些保留的类别值都在 0 -- 100 之间。

acl 的 C 库

在 lib_acl/include/stdlib/acl_define.h
#define acl_unused attribute ((unused))

typedef struct ACL_JSON ACL_JSON;
lib_acl\include\json\acl_json.h
lib_acl\src\json\acl_json.c

acl 的 C++ 库

typedef acl::HttpServletRequest request_t;
typedef acl::HttpServletResponse response_t;

编译

库依赖图

ACL 服务器编程模型

进程、线程、协程、非阻塞、触发器 5种。
process 是指进程服务模型;
fiber 是协程模型;
trigger 是定时器模型;

向上取整 (n-1)/M+1

1、求 n 除以 M 的向下取整
q = n / M,标准的 C 语言整数除法运算符 / 就是向下取整。
2、求 n 除以 M 的向上取整。
int q = (n-1)/M+1 就是向上取整。
3、向上取整的证明
下文使用 <> 表示向上取整,[] 表示向下取整。
<n/M> = [(n-1)/M]+1(n,M 都为正整数)
不失一般性。我们设 n = kM+r(k≧0整数,0≦r<M)。k和r不会同时为0,否则n为0了)。
当 k = 0 时(r>0),则n为小于M的正整数,两边都为1。
当 k > 0 时:
(1)当r = 0时:
左边:<n/M> = <(kM+0)/M> = k
右边:[(n-1)/M]+1 = [(kM+0-1)/M]+1 = [(k-1)M+M)-1)/M]+1
= [k-1+(M-1)/M]+1 = k+[(M-1)/M] = k
(1)当r > 0时。
左边:<n/M> = <(Mk+r)/M >= <k+r/M>= k+<r/M> = k+1
右边:[(n-1)/M]+1 = [(Mk+r-1)/M]+1 = [k+(r-1)/M]+1 = k+1+[(r-1)/M]=k+1
综上。命题得证。

三方库

渊源

更多参考: 郑树新@CSDN

上一篇 下一篇

猜你喜欢

热点阅读