linux 代码调试最小知识集

Step1.内存泄露侦测

打开第一个终端:(显示异常信息)

valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./app

界面示例:

==130227== Continuing ...
==130227== Use of uninitialised value of size 8
==130227==    at 0x5971B47: PyObject_Free (in /usr/lib64/libpython3.6m.so.1.0)
==130227==    by 0x59DFA99: ??? (in /usr/lib64/libpython3.6m.so.1.0)
==130227==    by 0x5A5CDE3: PyAST_CompileObject (in /usr/lib64/libpython3.6m.so.1.0)
==130227==    by 0x5A63D17: ??? (in /usr/lib64/libpython3.6m.so.1.0)
==130227==    by 0x591080A: PyRun_FileExFlags (in /usr/lib64/libpython3.6m.so.1.0)
==130227==    by 0x40A02E: gp_py_invoke_script_with_params (gppython.c:61)
==130227==    by 0x40F900: calc_measure_of (gpcalc.c:20)
==130227==    by 0x40C845: gen_MeasureOfDataArray (mqtt_payload.c:40)
==130227==    by 0x40CDD5: gen_rawSample_payload (mqtt_payload.c:169)
==130227==    by 0x40AE5D: timer_realdata (mqtt_cmd.c:211)
==130227==    by 0x505CF5E: timer_sigev_thread (in /usr/lib64/librt-2.17.so)
==130227==    by 0x4E43EA4: start_thread (in /usr/lib64/libpthread-2.17.so)
==130227== 
==130227== (action on error) vgdb me ... 
==130227== Continuing ...
time scale =  10000.0
./py/measure.py

Step2.gdb调试

打开第二个终端:(手工gdb调试控制)

加载程序  gdb ./app
此时记得把valgrind
运行  (gdb) run param1 param2....
加断点  (gdb) break function
显示堆栈  (gdb) backtrace  可以简写做bt
暂时停止某个异常信号的捕获: (gdb) handle SIGXCPU nostop 
继续执行 (gdb) continue
单步进入 (gdb) step
单步略过 (gdb) next
退出当前函数 (gdb) finish
打印变量 (gdb) print a1
显示变量 (gdb) dispaly a1
退出(gdb) quit

示例:

(gdb) continue
Continuing.

Breakpoint 2, calc_FFT_of (src=0x311af420, FFT=0x30e6a2e0) at /home/hxjd/src/src_shake/main/common/gpcalc.c:12
12          return gp_py_invoke_script_with_params(src, FFT, pyFileFFT, pModule, pDict);
(gdb) next

Program received signal SIGTRAP, Trace/breakpoint trap.

Program received signal SIGTRAP, Trace/breakpoint trap.

Program received signal SIGTRAP, Trace/breakpoint trap.

Program received signal SIGTRAP, Trace/breakpoint trap.

Program received signal SIGTRAP, Trace/breakpoint trap.

Step3.内存实时刷新

打开第三个终端:(内存总量实时刷新)

top -p PIDofApp

示例:

top - 16:52:06 up 2 days,  3:49,  0 users,  load average: 0.28, 0.23, 0.18
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.3 sy,  0.0 ni, 99.4 id,  0.1 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem :  7990060 total,   162744 free,  6306644 used,  1520672 buff/cache
KiB Swap:  8388604 total,  8387572 free,     1032 used.  1024572 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                           
130565 root      20   0  256108  52044  10152 S   0.0  0.7   0:05.85 gdb      

重点追踪RES列
 

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子正

thanks, bro...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值