1数据库性能调试:
必须使用benchmarksql 用户
//hostload:5236 得添加,不是注释
解析bengchmarksql 报告可能需要下载R语言, el7 下载R语言
Centos 7下yum安装R_jacknichao的专栏-CSDN博客
BenchmarkSQL v5.0测试达梦数据库,
benchmarksql 5.0测试达梦数据库_Downton97的博客-CSDN博客
BenchmarkSQL v5.0测试达梦数据库 - seabiscuit0922 - 博客园
2 lrzsz(Linux服务器和window互传文件工具)
3系统级性能分析工具perf的介绍与使用 perf
4listary win 环境安装 用户快速查找
5strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。
Linux下的调试工具strace与ltrace_魂影魔宅-CSDN博客_ltrace
6russ 命令
用途
跟踪进程的系统调用、动态装入的用户级函数调用、接收的信号和造成的机器故障。
7Valgrind是一套调试和分析工具。它的一个被广泛使用的默认工具——'Memcheck'——可以拦截malloc(),new(),free()和delete()调用。换句话说,它在检测下面这些问题非常有用:
它直接通过可执行文件运行。
Valgrind也有一些缺点,因为它增加了内存占用,会减慢你的程序。它有时会造成误报和漏报。它不能检测出静态分配的数组的访问越界问题。
“definitely lost”:确认丢失。程序中存在内存泄露,应尽快修复。当程序结束时如果一块动态分配的内存没有被释放且通过程序内的指针变量均无法访问这块内存则会报这个错误。
“indirectly lost”:间接丢失。当使用了含有指针成员的类或结构时可能会报这个错误。这类错误无需直接修复,他们总是与”definitely lost”一起出现,只要修复”definitely lost”即可。例子可参考我的例程。
“possibly lost”:可能丢失。大多数情况下应视为与”definitely lost”一样需要尽快修复,除非你的程序让一个指针指向一块动态分配的内存(但不是这块内存起始地址),然后通过运算得到这块内存起始地址,再释放它。例子可参考我的例程。当程序结束时如果一块动态分配的内存没有被释放且通过程序内的指针变量均无法访问这块内存的起始地址,但可以访问其中的某一部分数据,则会报这个错误。
“still reachable”:可以访问,未丢失但也未释放。如果程序是正常结束的,那么它可能不会造成程序崩溃,但长时间运行有可能耗尽系统资源,因此笔者建议修复它。如果程序是崩溃(如访问非法的地址而崩溃)而非正常结束的,则应当暂时忽略它,先修复导致程序崩溃的错误,然后重新检测。
“suppressed”:已被解决。出现了内存泄露但系统自动处理了。可以无视这类错误。这类错误我没能用例程触发,看官方的解释也不太清楚是操作系统处理的还是valgrind,也没有遇到过。所以无视他吧~
Valgrind生成可视化的图形需要下载gprof2dot: gprof2dot · PyPI
8 vim+cscope+ctags打造属于自己的IDE_没有你的夜的博客-CSDN博客_cscope ctags
本人有一键式安装脚本在本人的资源可以下载
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
vimrc 文件配置
set ts=4
set tags+=/disk3/i2active/tags
nmap
nmap
nmap
nmap
map
" ------- 设置tags的存放目录
"-------只允许taglist显示一个文件的信息
let Tlist_Show_One_File=1
" ---------当显示taglist信息的窗口是最后一个时,退出vim
let Tlist_Exit_onlyWindow=1
"-----时时更新taglist
let Tlist_Process_File_Always=1
set omnifunc=XXX_function
syntax on
set filetype=cpp
set nocp
filetype plugin on
set completeopt=menu,menuone
let OmniCpp_MayCompleteDot=1 " “ 打开 . 操作符
let OmniCpp_MayCompleteArrow=1 "打开 -> 操作符
let OmniCpp_MayCompleteScope=1 "打开 :: 操作符
let OmniCpp_NamespaceSearch=1 "打开命名空间
let OmniCpp_GlobalScopeSearch=1
let OmniCpp_DefaultNamespace=["std"]
let OmniCpp_ShowPrototypeInAbbr=1 "打开显示函数原型
let OmniCpp_SelectFirstItem = 2 "”自动弹出时自动跳至第一个
let Tlist_Show_One_File=1 "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow=1 "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Ctags_Cmd="/usr/bin/ctags" "将taglist与ctags关联
9. gdb watch
1. watch 变量的类型
a. 整形变量: int i; watch i;
b. 指针类型: char *p; watch p, watch *p;
它们是有区别的.
watch p 是查看 *(&p), 是p 变量本身。
watch (*p) 是 p 所指的内存的内容, 查看地址,一般是我们所需要的。
我们就是要看莫地址上的数据是怎样变化的,虽然这个地址具体位置只有编译器知道。
c. watch 一个数组或内存区间
char buf[128], watch buf,
是对buf 的128个数据进行了监视. 此时不是采用硬件断点,而是软中断实现的。
软中断方式去检查内存变量是比较耗费cpu资源的。
精确的指明地址是硬件中断。
2. 当你设置的观察点是一个局部变量时。局部变量无效后,观察点无效
Watchpoint 2 deleted because the program has left the block in
which its expression is valid.
2.1 !gdb 在给类成员设置watch 的操作, 使用完成的指向ep如下
(gdb) watch ((CRelayer * const) 0x7fed34019fd0)->m_bytes
Hardware watchpoint 6: ((CRelayer * const) 0x7fed34019fd0)->m_bytes
(gdb) c
Continuing.
Thread 6 "iarelay" hit Hardware watchpoint 6: ((CRelayer * const) 0x7fed34019fd0)->m_bytes
Old value = 372136
New value = 372226
CRelayer::Handle (this=0x7fed34019fd0, buf=0x7fed38002aed "", len=90) at Relayer.cpp:164
164 uint16_t op = GetActOp(pAct);
9.
09. 推荐60个相见恨晚的神器工具1
三种Linux性能分析工具的比较 三种Linux性能分析工具的比较_存储之厨的技术博客_51CTO博客
01AIX环境下CPU性能分析的常用工具_黄晓伟-CSDN博客
常用算法 :动态规划,贪心算法
异或规律:
a^a=0;自己和自己异或等于0
a^0=a;任何数字和0异或还等于他自己
a^b^c=a^c^b;异或运算具有交换律
clang 编译工具