linux下编译&&gdb编译和调试

来源:互联网 发布:python 字典 输入 编辑:程序博客网 时间:2024/04/28 04:33

编译C++:

g++ -g code.cpp –o code //linux下

g++ -g code.cpp –o code.exe //windows下

 

编译C:

gcc -g code.cpp –o code //linux下

gcc -g code.cpp –o code.exe //windows下

 

gcc是编译C的,g++是编译C++的,如果搞混可能编译不过报错。-g选项可以不加,但如果想用gdb调试,则一定要加。

 

正常运行:

>> ./code

 

Gdb调试运行:

>> gdb code

 

Gdb命令如下:如果连续输入同样的指令,可以直接使用回车

>>l   list  列出下面10行代码。默认为10,也可以自定义。E.g.  l 20

>>n  next 运行下一行,运行单条代码

>>r   run  运行

>>b 12   break 在第12行设断点  b func  在func函数处设置断点

>>info break  查看程序中所有的断点

>>c continue  继续运行

>>p i  print变量值,此处是打印变量i的值

>>bt  backtrace 查看函数的堆栈

>>step  单步跟踪

>>finish  退出函数

>>q 退出gdb

>>info frame  打印出当前更为详细的当前栈层的信息

>>info args  打印出大年函数的参数名和值

>>info locals 打印出当前函数中局部变量和值

>>info catch  打印出当前函数中的异常处理信息

 

>>watch expr  为变量或表达式expr设置一个观察点,一旦表达式值或变量有变化,马上停住

>>rwatch expr 当expr被读时停住程序

>>awatch expr 当expr的值被读或被写时停住程序

>> info watchpoints  列出所有已设置的观察点

 

>>catch event 设置捕捉点,捕捉程序运行时的一些时间,比如载入动态链接库、异常等

Event可以是:

Throw  一个C++抛出的异常

Catch 一个C++捕捉到的异常

Exec 调用系统调用exec

Fork 调用系统调用fork时

Vfork 调用系统调用vfork时

Load 或者 load libname  载入动态链接库时

Unload或者unload libname 卸载动态链接库时

 

Gdb中断点、捕捉点和观察点都算作停止点

>>clear  清楚所有以定义的停止点

>>clear func  >>clear filename:func  清除所有设置在函数上的停止点

>>clear linenum  >>clear filename:linenum  清除所有设置在指定行上的停止点

>>delete [breakpoints] [range]  删除指定的断点,breakpoints为断点号,若不指定断点号则删除所有断点,range是断点号的范围 

>>disable [breakpoints] [range]disable掉所指定的停止点,breakpoints为断点号,不指定则disable掉所有停止点

>>enable [breakpoints] [range] enable所指定的停止点

 

gdb program是直接使用gdb于program程序上。

Gdb  program core 可以同时调试一个运行程序和core dump

Gdb program  pid 制定这个服务程序运行时的进程id,gdb会自动attach进行调试。program需要在PATH环境变量中可以搜索到。

 

Gdb启动时的参数:

-c -core  调试core dump文件

-s file\ -symbols file  从文件中读取符号表

-d dir\ -directory dir  加入一个源文件的搜索路径,默认为PATH环境变量

 

 

0 0
原创粉丝点击