Windows和Linux下的调试有区别吗?
调试思路上一定是一样的;调试的操作方式有差别(Linux命令行调试,Windows窗口)
1.准备工作:
默认情况下,gdb无法进行对现在发布的程序进行调试(debug / release)。在Linux下用gcc编译生成的软件的时候,默认是release的!无法被直接调试。使用gcc -g会生成debug版本。
程序员需要调试,用户用不到也不会用debug,调试信息对用户是冗余的,用户需要更小的体量和优化速度。
补充:
---gcc默认行为:默认是动态链接的、默认是release版本
---vim默认行为:默认打开的时候是命令模式
2.调试工作
---进入gdb调试
---显示代码 l(list), l 0 , 回车 ->全部显示完毕
---打断点 b 24 (break),给第24行打断点
---查看断点 info b,显示打过段断点的所有行
---去掉断点 d 1,去掉第一个断点(在断点列表中的序号)
Windows下vs:逐语句F11,逐过程 F10,逐断点-开始调试F5,直接执行不调试Ctrl+F5
---开始调试-逐断点 r(run),运行在断点处停下
---跳到下一个断点 c(continue),运行至下一个断点处
---逐过程 n(next),不进入函数内
---逐语句 s(step),进入到函数内;当n停到某函数时也可以s进这个函数
---查看函数的调用堆栈 bt
---直接将当前函数跑完停下来 finish
---查看变量的值或者地址 p
---长显示变量 ,变量名 display\undisplay,可与n等搭配使用
---跳转到代码的某行 until 某行,如果是无意义的符号会向下