此文,来源于iTesting公号,手把手教大家如何通过SonarQube做静态代码分析,有兴趣的,跟着文章,实操之 。 如果工作用不上,自己业余玩玩,玩会了,写在简历上,也是一个亮点 。...=测试)来说,已经不满足从从需求分析介入项目开发过程了。...静态代码检查可以使得我们在代码提交的一刹那就发现项目中的潜在问题,今天我就来讲讲如何使用SonarQube做静态代码检查。 Why SonarQube?...这样就说明 scanner配置成功了,我们来分析下我们的项目吧!...利用SonarQube进行静态代码分析, 真正做到了从源头解决问题,也使得我们测试人员对代码改动更有信心,怎么样?赶快用起来吧 。 End 此文来自iTesting ,已授权转载。
静态代码检查可以使得我们在代码提交的一刹那就发现项目中的潜在问题,今天我就来讲讲如何使用SonarQube做静态代码检查。 Why SonarQube?...这样就说明 scanner配置成功了,我们来分析下我们的项目!...SonarQube可以从以下几个维度来分析代码质量: ? 我们可以根据SonarQube 扫描出来的结果,结合项目实际,建议开发修改....如果你们的项目跟jenkins集成,还可以添加SonarQube插件,这样每一个build生成后都会有相应的代码分析结果参考。...利用SonarQube进行静态代码分析, 真正做到了从源头解决问题,也使得我们测试人员对代码改动更有信心,怎么样? 赶快用起来吧!
Linux内核源码分析方法 一、内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。...我也是通过一个项目接触了Linux内核源码的分析,从源码的分析工作中,我受益颇多。除了获取相关的内核知识外,也改变了我对内核代码的过往认知: 1.内核源码的分析并非“高不可攀”。...内核源码分析的难度不在于源码本身,而在于如何使用更合适的分析代码的方式和手段。...而我也并非内核源码方面的专家,这么做也只是希望分享我自己的分析源码的经验和心得,为那些需要的人提供参考和帮助,说的“冠冕堂皇”一点,也算是为计算机这个行业,尤其是在操作系统内核方面贡献自己的一份绵薄之力...目前的Linux源码会把模块相关的文档说明保存在源码目录的documention的文件夹下,如果待分析的模块没有文档说明,这多少会增加定位关键源码文件的难度,但是不会导致我们找不到我们要分析的源码。
本文将从源码角度分析epoll的实现机制,使用的内核版本为 ➜ bionic git:(ffdd392b8196) git remote -v origin git://git.launchpad.net.../~ubuntu-kernel/ubuntu/+source/linux/+git/bionic (fetch) origin git://git.launchpad.net/~ubuntu-kernel.../ubuntu/+source/linux/+git/bionic (push) ➜ bionic git:(ffdd392b8196) git status HEAD detached at Ubuntu...-4.15.0-45.48 有关如何找到对应的内核源码,请参考 找到运行的Ubuntu版本对应的内核源码。...至此,epoll_wait 方法也分析完毕。 有关 epoll_ctl 方法及其他epoll内容,我们会在另起文章再来分析。
调用sk->sk_prot->get_port(sk, inet->inet_num)方法做 listening transition 验证。 该方法的逻辑在第二篇文章中有讲。 5.
上面的文章已经分析了tcp建立的整个过程,下面我们来看下write是如何实现tcp写的。...// include/linux/fs.h static inline ssize_t call_write_iter(struct file *file, struct kiocb *kio,
unix_proto_getname, unix_proto_read, unix_proto_write, unix_proto_select, unix_proto_ioctl }; 二、建立连接源码分析...buf = NULL; upd->bp_head = upd->bp_tail = 0; } } --upd->refcnt; } 三、读发送接收源码分析
之前的文章已经分析了tcp的建立过程以及tcp读和写,下面我们继续看下shutdown方法。
继上一篇 Linux epoll 源码分析 1,我们来继续看下 epoll_ctl 方法。...下面,我们再以tcp socket文件为例,具体看下ep_item_poll是如何做的。 如果是tcp socket类型的文件,ep_item_poll方法最终会调用tcp_poll方法。...// include/linux/poll.h static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address...限于篇幅原因,ep_remove和ep_modify方法我们会在下一篇文章中分析。
Linux下的tcp编程中,第一步就是要创建socket,本文将从源码角度看下socket是如何被创建的。...-45.48 有关如何找到当前运行的Ubuntu版本对应的内核源码,请参考 找到运行的Ubuntu版本对应的内核源码。...在看具体的源码分析之前,最好先看下socket的man文档,这样能对socket api有个大概的了解。...// include/linux/fs.h struct file_operations { ......有关epoll的源码分析,请参见 Linux epoll 源码分析 1 Linux epoll 源码分析 2 Linux epoll 源码分析 3 5.
/* * linux/mm/memory.c * * (C) 1991 Linus Torvalds */ /* * demand-loading started 01.12.91 -...invalidate()"s - I wasn't doing enough of them. */ #include #include #include #include #include volatile void do_exit(long code); static
我的源码分析,是基于Linux Kernel 4.4.19 (https://www.kernel.org/pub/linux/kernel/v4.x/patch-4.4.19.gz)版本的,由于namespace...Begin with “task_struct” As u know, Linux Namespace是用来做进程资源隔离的,那么在进程描述符中,一定有对应的Namespaces Info。...初始化完成处理信息 调用 wake_up_new_task 将子进程加入调度器,为之分配 CPU 如果是 vfork,父进程等待子进程完成 exec 替换自己的地址空间 ##copy_process源码分析...###sched_fork源码分析 linux-4.4.19/kernel/sched/core.c #2187 int sched_fork(unsigned long clone_flags, struct...return 0; } 我们可以看到sched_fork大致完成了两项重要工作,一是将子进程状态设置为 TASK_RUNNING,二是为其分配 CPU ###copy_thread_tls源码分析
如果不存在,则创建一个新的inet_bind_bucket实例tb,并将其放入head指向的列表中,供后续做冲突检查。 5. 调用inet_bind_hash方法,设置sk为tb的owner。
在上一篇文章 Linux epoll 源码分析 2 中,我们分析了 epoll_ctl 的 ep_insert 方法,在这里我们继续看下 ep_remove 和 ep_modify 方法。
在linux下,假设我们想打开文件/dev/tty,我们可以使用系统调用open,比如: int fd = open("/dev/tty", O_RDWR, 0); 本文将从源码角度看下,在linux内核中...// include/linux/fs.h struct filename { const char *name; /* pointer to actual...限于篇幅原因,本文暂且分析到这,下一篇继续分析vfs_open方法。 完。
上一篇文章我们分析了shutdown方法的实现,这里我们再看下close方法。
connect方法对应的内核源码为 // net/socket.c SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr
accept方法对应的内核源码为 // net/socket.c SYSCALL_DEFINE3(accept, int, fd, struct sockaddr __user *, upeer_sockaddr
之后又调用call_read_iter方法,传入这些新的参数,继续执行read逻辑 // include/linux/fs.h static inline ssize_t call_read_iter...当tcp层收到数据后,会将数据放到sk->sk_receive_queue队列中,等待用户读取,该部分逻辑的详细分析,我们以后会另开文章详细讲解。 7.
前两篇文章中我们讲到,shutdown和close方法会发送fin消息给对方,开始tcp连接的关闭流程,现在我们从源码角度看下tcp连接关闭的具体过程,以及中间发送的消息和涉及到的各种状态。
领取专属 10元无门槛券
手把手带您无忧上云