四川网站建设外包服务高端网站设计企业
四川网站建设外包服务,高端网站设计企业,东莞市网站建设制作设计平台,微信登陆wordpress背景
在c程序中#xff0c;除了基本的print#xff0c;我们最常用的工具就是gdb#xff0c;它有众多的优点#xff0c;它能够在程序运行时#xff0c;打印变量信息#xff0c;也可以在程序coredump之后#xff0c;离线调试#xff0c;可以说#xff0c;它是排查问题的…背景在c程序中除了基本的print我们最常用的工具就是gdb它有众多的优点它能够在程序运行时打印变量信息也可以在程序coredump之后离线调试可以说它是排查问题的利器。gdb基本功能在函数处打断点在文件的某一行打断点等等(gdb) b maingdb打印数组在GDB 中执行以下 Python 脚本这个我也是第一次使用觉得还是有点惊讶它的调试能力的。(gdb) pythonfor i in range(0, 2000):val gdb.parse_and_eval(“array[%d]-timer_head” % i)print(“array[%d] %s” % (i, val))endwatch变量watch 是 GDB 的 “监视点”watchpoint 功能当某个变量的值被修改时程序自动暂停并打印旧值和新值。这比 break print 更高效尤其适合追踪“谁改了我的变量”。这个是内存被改调试的神器。(gdb) watch variable_name定时采集变量信息主要用于跑测试用例的时候没办法watch变量的情况。while true; do sudo gdb -p $PID -batch -ex ‘print counter’ -ex ‘detach’; sleep 1; doneGDB查看变量 name在结构体student中的偏移(gdb) p ((struct student *)0)-name原理将空指针 (struct student *)0 强转后取成员地址得到的就是该成员相对于结构体起始地址的偏移因为基地址是 0.总结gdb 还有很多的调试方法待后续使用过程中一一补充。