C++调试小技巧

AddressFsanitize检测内存越界和内存泄漏

CMAKE_CXX_FLAGS中添加-o0 -fsanitize=address -fno-omit-frame-pointer -fsanitize=leak 关闭编译优化,使用AddressFsanitize检测内存越界,调试用,正式使用勿开启

gprof性能调试工具

CMAKE_CXX_FLAGS中添加-pg选项,可使用gprof性能调试工具,可以统计出各个函数的调用次数、时间、以及函数调用图。

jemalloc替换gcc默认内存分配器

CMAKE_CXX_FLAGS中添加-ljemalloc选项,引用jemalloc管理内存,在多核多线程环境下效率比glic自带的内存管理高很多,但是目前valgrind检测不出tcmalloc和jemalloc的内存泄露。

pstack查看内存堆栈

程序运行过程中输入pstack $进程号可以观察该进程的各个线程,或者pstack $线程号观察线程堆栈,对于排查死锁问题非常有效。

log4c打印相对路径

CMAKE_CXX_FLAGS-D__FILE__='\"$<\"'选项,将__LINE__宏改写,但是此时会给编译警告,宏重定义,可在CMakeLists.txt中设置add_compile_options(-Wall -Wno-builtin-macro-redefined)关闭该警告。

关闭api已废弃警告

使用第三方库旧的api接口,会给出接口废弃警告,可以通过设置
add_compile_options(-Wall -Wno-deprecated-declarations)关闭该警告。最好还是使用新接口,不要使用废弃接口。

linux下查看进程各线程占用cpu

ps H -eo user,pid,ppid,tid,psr,time,%cpu,cmd --sort=%cpu | grep $进程名 | grep -v $排除的进程名

你可能感兴趣的:(C++)