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 $排除的进程名

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值