zoukankan      html  css  js  c++  java
  • 新手入门之GDB调试

    写这篇文章算是对最近两天工作的一个经验总结吧。

    要让可执行文件比较方便地在DGB上调试,在用gcc编译的时候要使用-g选项。

    如何使用GDB启动被调试程序?

    "gdb path_to_debugee”,其实这还不是真正的启动,要启动调试程序,还需要在命令行里敲"r"。如果debugee在启动时还要有相应的输入参数,比方说:debugee –p1,那么在前面提到的r命令后面,附带上-p1就可以了,完整的样子看上去是这样的:"r –p1"。

    设置断点

    通过gdb path_to_debugee启动调试后,就可以设置断点了。设置断点的命令很直观,break。我们可以:

    • 在函数的入口设置断点,比方说“break main”。也可以通过类名来限定目标函数。比方说“break classA::func”。
    • 根据行号设置断点:break line_number。这条命令默认的行在当前运行的编译单元对应的原文件中。如果要指定某个文件中的某行,请使用:break file.cpp:line_number。
    • 条件断点:条件断点的设置和前面提到的类似,就是要加一个判断条件:if condition。类似于“break func/line if some_variable > or < num”的形式。

    单步调试

    单步有两种形式:

    • 单步执行并跳过这一行(VS F10功能):n
    • 单步执行并进入(VS F11功能):s

    打印变量

    这个比较简单,命令行:p var_name

    打印堆栈

    命令行:backtrace,简写bt

    打印源代码

    命令行:l。这个命令接受参数。比方说要打印从第几行到第几行,可以这么做:l 1,18。这会打印当前执行文件第1行到18行的代码。要打印某个函数,可以是:l function_name。要打印某个成员函数:l classname::memfunc。

    结束调试程序

    kill

    结束语

    附上一些资源,供向我这样的初学者参考:

  • 相关阅读:
    css学习总结
    bootstrap的学习总结
    一些组件配置的理解
    php 微信公众号支付(小程序也是这么支付的)
    mysql 链接超过ip限制时的报错
    php生成二维码
    wamp配置虚拟主机 php 5.6.25
    php 渣全的循环
    4、kafka、spark streaming
    gauss消元
  • 原文地址:https://www.cnblogs.com/wpcockroach/p/3273409.html
Copyright © 2011-2022 走看看