美文网首页
ACL 应用速记

ACL 应用速记

作者: michael_jia | 来源:发表于2019-04-16 08:51 被阅读0次

Visual Studio Code

  • 安装扩展 PrintCode:打印源码
    浏览器搜索 PrintCode,到 marketplace 安装。
    配置:VS Code Printing is highly configurable. Settings can be modified by going to Code > Preferences > Settings > Extensions > PrintCode Configuration.
    使用:F1,type PrintCode
  • 安装 Print extension:Rendered Markdown, coloured code.

ACL 入门

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

GDB 调试

  • gdb <program> <core>
    产生core文件后,使用上述命令查看原因。
    编译debug版本:在 cmake 编译时 -DCMAKE_BUILD_TYPE=Debug
    进入调试界面后,使用 backtracebt)、updown 等命令查看。
  • gdb -tui 可以分窗口显示调试命令和源代码,可以尝试。
  • 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

  • strace <程序名称>
    Trace Linux Command System Calls
    You can simply run a command with strace like this, here we are tracing of all system calls made by the df command.
  • sudo strace -p <pid>
    Trace Linux Process PID
    If a process is already running, you can trace it by simply passing its PID as follows; this will fill your screen with continues output that shows system calls being made by the process, to end it, press [Ctrl + C].
  • sudo strace -o <program>
    Redirect Trace Output to File
    To write the trace messages sent to standard error to a file, use the -o option. This means that only the command output is printed on the screen as shown below.
  • Troubleshooting and Debugging Linux Processes

tui mode

  • How to automatically refresh gdb in tui mode?
    在 TUI(Text User Interface)调试模式下,有的时候代码窗口会乱掉,使用 ~/.gdbinit 进行命令 hook 即可。文件内容如下,即可在 执行 next 命令后 refresh 窗口。在 tui 下,通过 tabset 4 可设置 tab width 为 4。
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.a。
    源码:lib_acl\src\stdlib),有如下文件:
    acl_mylog.c => acl_msg.c => acl_debug.c 层层封装。
  • acl_unused

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

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

acl 的 C++ 库

  • log文件
    包含头文件:lib_acl_cpp\include\acl_cpp\stdlib\log.hpp
    源代码文件:lib_acl_cpp\src\stdlib\log.cpp
  • acl::string
    包含头文件:lib_acl_cpp\include\acl_cpp\stdlib\string.hpp
    源代码文件:lib_acl_cpp\src\stdlib\string.cpp
  • acl::json_node
    包含头文件:lib_acl_cpp\include\acl_cpp\stdlib\json.hpp
    源代码文件:lib_acl_cpp\src\stdlib\json.cpp
  • acl::HttpServletRequest、acl::HttpServletResponse
    包含头文件:lib_acl_cpp\include\acl_cpp\http\HttpServletRequest.hpp
    源代码文件:lib_acl_cpp\src\http\HttpServletRequest.cpp
    一般在 stdafx.h 中定义:

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

  • acl::master_fiber
    lib_fiber/cpp/include/fiber
    lib_fiber/cpp/src
    bool run_alone(const char* addrs, const char* path = NULL); addrs 监听的本机服务地址列表;path 指定配置文件路径。

编译

  • 编译使用 acl 协程库
    这个示例简洁易懂,对于相关依赖库的描述清晰,堪称经典教材。
    库的依赖关系:libfiber_cpp.a libacl_all.a libfiber.a

    因为协程是采用了 hook 模式,必须 放到 acl 基础库后面才可以。
    libacl_all 里包含了 lib_acl_cpp.a, lib_protocol.a, lib_acl.a

库依赖图

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

相关文章

  • ACL 应用速记

    ACL 入门 acl库使用FAQ[https://blog.csdn.net/zsxxsz/article/det...

  • 思科ACL配置与扩展

    思科ACL配置与扩展 一.实验目的 (1).掌握基本ACL (2).掌握扩展ACL (3).学会如何应用ACL 二...

  • 华为acl

    acl access control list 访问控制列表 acl 基本acl 2000-29...

  • ACL介绍

    ACL:访问控制列表(centos 7默认打开)顺序:owner > acl user > group acl ...

  • kafka Acl认证

    添加Acl 创建用户用于测试Acl授权 添加acl 要添加一个acl “允许用户Bob和Alice从IP 198....

  • 权限管理(1)-ACL权限

    1. ACL概述 ACL 是用于解决用户对文件身份不足的问题的 2. 开启ACL 3. ACL基本命令 #查询文件...

  • 思科设备ACL实战全集

    vpcs里,按住ctrl 不放,按住c, ping -t 停止 标准ACL应用: 1.VLAN 10和20之间不能...

  • ovn acl功能

    本文介绍一下ovn的acl功能,用来设置访问控制列表,并且只能应用在逻辑交换机或者port group上,不能应用...

  • 1.ACL访问控制列表

    一、基础知识 1.访问控制列表ACL,分为基本ACL(2000~2999)、高级ACL(3000~3999)、二层...

  • liunx 配置acl setfacl/getfacl

    添加acl权限setfacl : 获取acl权限getfacl : 用法: setfacl [-bkndRLP] ...

网友评论

      本文标题:ACL 应用速记

      本文链接:https://www.haomeiwen.com/subject/betlyftx.html