学习啦 > 学习电脑 > 操作系统 > Linux教程 > linux gdb调试基本命令

linux gdb调试基本命令

时间: 志艺942 分享

学习啦在线学习网linux gdb调试基本命令

学习啦在线学习网   近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

学习啦在线学习网   前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

  gdb program //最常用的用gdb启动程序,开始调试的方式

学习啦在线学习网   gdb program core //用gdb查看core dump文件,跟踪程序core的原因

  gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

学习啦在线学习网   gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

  (1)执行命令模式

学习啦在线学习网   -batch选项。

学习啦在线学习网   比如:打印$pid进程所有线程的堆栈并退出。

  gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

学习啦在线学习网   (2).交互模式

学习啦在线学习网   run //运行程序

学习啦在线学习网   continue //中断后继续运行到下一个断点

  step //单步执行,进入函数

  next //单步执行

学习啦在线学习网   return //函数未执行完,忽略未执行的语句,返回。

  finish //函数执行完毕返回。

学习啦在线学习网   call //调用某一个函数 fun("1234")

  (backtrace)bt //显示栈桢

学习啦在线学习网   bt N //显示开头N个栈桢

  bt -N //显示最后N个栈桢

学习啦在线学习网   (frame)f N //显示第N层栈桢

  list //显示源码

  set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

  continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

学习啦在线学习网   break 函数名 //设置断在某个函数

  break 文件名:行号 //设置断在某一行

学习啦在线学习网   info break //查看设置的断点信息

学习啦在线学习网   break if condition //条件断点

学习啦在线学习网   break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

  delete 断点号 断点号... //删除一个或多个断点

  diable 断点号 断点号... //禁止一个或多个断点

  enable 断点号 断点号... //打开一个或多个断点

学习啦在线学习网   command 断点号 //断点触发时,执行命令,一般用于打印变量

学习啦在线学习网   (gdb) command 1

  Type commands for breakpoint(s) 1, one per line.

  End with a line saying just "end".

  >print x

  >end

  (gdb)

  4.检测点

  watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

  rwatch //当表达式(变量)expr被读时,停住程序。

  awatch //当表达式(变量)的值被读或被写时,停住程序。

学习啦在线学习网   info watchpoints //列出当前所设置了的所有观察点。

  经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

学习啦在线学习网   比如:观察examined_rows变量神马时候被修改

学习啦在线学习网   (1).p &examined_rows,得到地址

学习啦在线学习网   (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

学习啦在线学习网   set print element 0 //输出完整的字符串

学习啦在线学习网   set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

  print {type} variable

  比如:

  (gdb) p {ABC} 0x7fffffffe710

  

linux gdb调试基本命令

  近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

  前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

  gdb program //最常用的用gdb启动程序,开始调试的方式

  gdb program core //用gdb查看core dump文件,跟踪程序core的原因

学习啦在线学习网   gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

学习啦在线学习网   gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

学习啦在线学习网   (1)执行命令模式

学习啦在线学习网   -batch选项。

  比如:打印$pid进程所有线程的堆栈并退出。

  gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

  (2).交互模式

学习啦在线学习网   run //运行程序

学习啦在线学习网   continue //中断后继续运行到下一个断点

学习啦在线学习网   step //单步执行,进入函数

  next //单步执行

  return //函数未执行完,忽略未执行的语句,返回。

学习啦在线学习网   finish //函数执行完毕返回。

学习啦在线学习网   call //调用某一个函数 fun("1234")

学习啦在线学习网   (backtrace)bt //显示栈桢

学习啦在线学习网   bt N //显示开头N个栈桢

  bt -N //显示最后N个栈桢

学习啦在线学习网   (frame)f N //显示第N层栈桢

  list //显示源码

学习啦在线学习网   set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

学习啦在线学习网   continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

  break 函数名 //设置断在某个函数

学习啦在线学习网   break 文件名:行号 //设置断在某一行

  info break //查看设置的断点信息

学习啦在线学习网   break if condition //条件断点

  break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

  delete 断点号 断点号... //删除一个或多个断点

学习啦在线学习网   diable 断点号 断点号... //禁止一个或多个断点

学习啦在线学习网   enable 断点号 断点号... //打开一个或多个断点

  command 断点号 //断点触发时,执行命令,一般用于打印变量

学习啦在线学习网   (gdb) command 1

  Type commands for breakpoint(s) 1, one per line.

学习啦在线学习网   End with a line saying just "end".

  >print x

  >end

  (gdb)

  4.检测点

学习啦在线学习网   watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

学习啦在线学习网   rwatch //当表达式(变量)expr被读时,停住程序。

  awatch //当表达式(变量)的值被读或被写时,停住程序。

学习啦在线学习网   info watchpoints //列出当前所设置了的所有观察点。

  经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

  比如:观察examined_rows变量神马时候被修改

学习啦在线学习网   (1).p &examined_rows,得到地址

学习啦在线学习网   (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

  set print element 0 //输出完整的字符串

学习啦在线学习网   set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

学习啦在线学习网   print {type} variable

  比如:

  (gdb) p {ABC} 0x7fffffffe710

  

linux gdb调试基本命令

学习啦在线学习网   近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

学习啦在线学习网   前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

  gdb program //最常用的用gdb启动程序,开始调试的方式

学习啦在线学习网   gdb program core //用gdb查看core dump文件,跟踪程序core的原因

  gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

学习啦在线学习网   gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

  (1)执行命令模式

学习啦在线学习网   -batch选项。

学习啦在线学习网   比如:打印$pid进程所有线程的堆栈并退出。

学习啦在线学习网   gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

  (2).交互模式

  run //运行程序

  continue //中断后继续运行到下一个断点

学习啦在线学习网   step //单步执行,进入函数

学习啦在线学习网   next //单步执行

  return //函数未执行完,忽略未执行的语句,返回。

  finish //函数执行完毕返回。

  call //调用某一个函数 fun("1234")

  (backtrace)bt //显示栈桢

学习啦在线学习网   bt N //显示开头N个栈桢

学习啦在线学习网   bt -N //显示最后N个栈桢

学习啦在线学习网   (frame)f N //显示第N层栈桢

  list //显示源码

学习啦在线学习网   set directory //设置gdb的工作目录

学习啦在线学习网   pwd //当前的工作目录

  (3)反复执行

学习啦在线学习网   continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

  break 函数名 //设置断在某个函数

学习啦在线学习网   break 文件名:行号 //设置断在某一行

  info break //查看设置的断点信息

学习啦在线学习网   break if condition //条件断点

学习啦在线学习网   break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

  delete 断点号 断点号... //删除一个或多个断点

  diable 断点号 断点号... //禁止一个或多个断点

学习啦在线学习网   enable 断点号 断点号... //打开一个或多个断点

  command 断点号 //断点触发时,执行命令,一般用于打印变量

  (gdb) command 1

学习啦在线学习网   Type commands for breakpoint(s) 1, one per line.

  End with a line saying just "end".

  >print x

  >end

  (gdb)

  4.检测点

  watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

  rwatch //当表达式(变量)expr被读时,停住程序。

  awatch //当表达式(变量)的值被读或被写时,停住程序。

学习啦在线学习网   info watchpoints //列出当前所设置了的所有观察点。

学习啦在线学习网   经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

  比如:观察examined_rows变量神马时候被修改

学习啦在线学习网   (1).p &examined_rows,得到地址

  (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

学习啦在线学习网   set print element 0 //输出完整的字符串

  set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

学习啦在线学习网   print {type} variable

  比如:

学习啦在线学习网   (gdb) p {ABC} 0x7fffffffe710

  

linux gdb调试基本命令

  近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

学习啦在线学习网   前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

  gdb program //最常用的用gdb启动程序,开始调试的方式

学习啦在线学习网   gdb program core //用gdb查看core dump文件,跟踪程序core的原因

学习啦在线学习网   gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

学习啦在线学习网   gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

学习啦在线学习网   (1)执行命令模式

  -batch选项。

  比如:打印$pid进程所有线程的堆栈并退出。

学习啦在线学习网   gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

  (2).交互模式

  run //运行程序

  continue //中断后继续运行到下一个断点

  step //单步执行,进入函数

  next //单步执行

  return //函数未执行完,忽略未执行的语句,返回。

学习啦在线学习网   finish //函数执行完毕返回。

  call //调用某一个函数 fun("1234")

学习啦在线学习网   (backtrace)bt //显示栈桢

学习啦在线学习网   bt N //显示开头N个栈桢

  bt -N //显示最后N个栈桢

  (frame)f N //显示第N层栈桢

  list //显示源码

学习啦在线学习网   set directory //设置gdb的工作目录

学习啦在线学习网   pwd //当前的工作目录

  (3)反复执行

  continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

  break 函数名 //设置断在某个函数

学习啦在线学习网   break 文件名:行号 //设置断在某一行

学习啦在线学习网   info break //查看设置的断点信息

学习啦在线学习网   break if condition //条件断点

  break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

学习啦在线学习网   delete 断点号 断点号... //删除一个或多个断点

学习啦在线学习网   diable 断点号 断点号... //禁止一个或多个断点

  enable 断点号 断点号... //打开一个或多个断点

  command 断点号 //断点触发时,执行命令,一般用于打印变量

学习啦在线学习网   (gdb) command 1

  Type commands for breakpoint(s) 1, one per line.

  End with a line saying just "end".

学习啦在线学习网   >print x

  >end

  (gdb)

  4.检测点

学习啦在线学习网   watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

学习啦在线学习网   rwatch //当表达式(变量)expr被读时,停住程序。

  awatch //当表达式(变量)的值被读或被写时,停住程序。

学习啦在线学习网   info watchpoints //列出当前所设置了的所有观察点。

学习啦在线学习网   经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

  比如:观察examined_rows变量神马时候被修改

  (1).p &examined_rows,得到地址

学习啦在线学习网   (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

学习啦在线学习网   set print elements N //指定打印的长度,对长字符串特别有用。

  set print element 0 //输出完整的字符串

学习啦在线学习网   set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

学习啦在线学习网   print {type} variable

  比如:

  (gdb) p {ABC} 0x7fffffffe710

  

学习啦在线学习网linux gdb调试基本命令

学习啦在线学习网   近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

学习啦在线学习网   前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

  gdb program //最常用的用gdb启动程序,开始调试的方式

  gdb program core //用gdb查看core dump文件,跟踪程序core的原因

  gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

  gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

学习啦在线学习网   (1)执行命令模式

  -batch选项。

  比如:打印$pid进程所有线程的堆栈并退出。

学习啦在线学习网   gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

  (2).交互模式

  run //运行程序

学习啦在线学习网   continue //中断后继续运行到下一个断点

学习啦在线学习网   step //单步执行,进入函数

  next //单步执行

学习啦在线学习网   return //函数未执行完,忽略未执行的语句,返回。

  finish //函数执行完毕返回。

  call //调用某一个函数 fun("1234")

  (backtrace)bt //显示栈桢

  bt N //显示开头N个栈桢

学习啦在线学习网   bt -N //显示最后N个栈桢

  (frame)f N //显示第N层栈桢

  list //显示源码

学习啦在线学习网   set directory //设置gdb的工作目录

学习啦在线学习网   pwd //当前的工作目录

  (3)反复执行

学习啦在线学习网   continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

学习啦在线学习网   break 函数名 //设置断在某个函数

  break 文件名:行号 //设置断在某一行

学习啦在线学习网   info break //查看设置的断点信息

  break if condition //条件断点

  break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

学习啦在线学习网   delete 断点号 断点号... //删除一个或多个断点

学习啦在线学习网   diable 断点号 断点号... //禁止一个或多个断点

学习啦在线学习网   enable 断点号 断点号... //打开一个或多个断点

  command 断点号 //断点触发时,执行命令,一般用于打印变量

  (gdb) command 1

学习啦在线学习网   Type commands for breakpoint(s) 1, one per line.

  End with a line saying just "end".

学习啦在线学习网   >print x

  >end

  (gdb)

  4.检测点

  watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

学习啦在线学习网   rwatch //当表达式(变量)expr被读时,停住程序。

学习啦在线学习网   awatch //当表达式(变量)的值被读或被写时,停住程序。

  info watchpoints //列出当前所设置了的所有观察点。

学习啦在线学习网   经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

学习啦在线学习网   比如:观察examined_rows变量神马时候被修改

学习啦在线学习网   (1).p &examined_rows,得到地址

  (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

学习啦在线学习网   set print element 0 //输出完整的字符串

学习啦在线学习网   set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

  print {type} variable

  比如:

  (gdb) p {ABC} 0x7fffffffe710

  

linux gdb调试基本命令

  近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

  前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

  gdb program //最常用的用gdb启动程序,开始调试的方式

  gdb program core //用gdb查看core dump文件,跟踪程序core的原因

  gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

  gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

  (1)执行命令模式

学习啦在线学习网   -batch选项。

学习啦在线学习网   比如:打印$pid进程所有线程的堆栈并退出。

学习啦在线学习网   gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

  (2).交互模式

  run //运行程序

学习啦在线学习网   continue //中断后继续运行到下一个断点

  step //单步执行,进入函数

学习啦在线学习网   next //单步执行

学习啦在线学习网   return //函数未执行完,忽略未执行的语句,返回。

学习啦在线学习网   finish //函数执行完毕返回。

  call //调用某一个函数 fun("1234")

  (backtrace)bt //显示栈桢

  bt N //显示开头N个栈桢

  bt -N //显示最后N个栈桢

  (frame)f N //显示第N层栈桢

学习啦在线学习网   list //显示源码

  set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

  continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

  break 函数名 //设置断在某个函数

  break 文件名:行号 //设置断在某一行

  info break //查看设置的断点信息

学习啦在线学习网   break if condition //条件断点

  break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

学习啦在线学习网   delete 断点号 断点号... //删除一个或多个断点

学习啦在线学习网   diable 断点号 断点号... //禁止一个或多个断点

  enable 断点号 断点号... //打开一个或多个断点

学习啦在线学习网   command 断点号 //断点触发时,执行命令,一般用于打印变量

学习啦在线学习网   (gdb) command 1

学习啦在线学习网   Type commands for breakpoint(s) 1, one per line.

学习啦在线学习网   End with a line saying just "end".

学习啦在线学习网   >print x

  >end

  (gdb)

  4.检测点

学习啦在线学习网   watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

学习啦在线学习网   rwatch //当表达式(变量)expr被读时,停住程序。

  awatch //当表达式(变量)的值被读或被写时,停住程序。

  info watchpoints //列出当前所设置了的所有观察点。

学习啦在线学习网   经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

学习啦在线学习网   比如:观察examined_rows变量神马时候被修改

学习啦在线学习网   (1).p &examined_rows,得到地址

  (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

  set print element 0 //输出完整的字符串

  set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

  print {type} variable

  比如:

  (gdb) p {ABC} 0x7fffffffe710

  

学习啦在线学习网linux gdb调试基本命令

  近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

  前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

  gdb program //最常用的用gdb启动程序,开始调试的方式

  gdb program core //用gdb查看core dump文件,跟踪程序core的原因

学习啦在线学习网   gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

学习啦在线学习网   gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

  (1)执行命令模式

  -batch选项。

  比如:打印$pid进程所有线程的堆栈并退出。

  gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

学习啦在线学习网   (2).交互模式

学习啦在线学习网   run //运行程序

  continue //中断后继续运行到下一个断点

  step //单步执行,进入函数

学习啦在线学习网   next //单步执行

  return //函数未执行完,忽略未执行的语句,返回。

学习啦在线学习网   finish //函数执行完毕返回。

  call //调用某一个函数 fun("1234")

学习啦在线学习网   (backtrace)bt //显示栈桢

  bt N //显示开头N个栈桢

学习啦在线学习网   bt -N //显示最后N个栈桢

  (frame)f N //显示第N层栈桢

学习啦在线学习网   list //显示源码

  set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

学习啦在线学习网   continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

  break 函数名 //设置断在某个函数

学习啦在线学习网   break 文件名:行号 //设置断在某一行

学习啦在线学习网   info break //查看设置的断点信息

学习啦在线学习网   break if condition //条件断点

学习啦在线学习网   break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

  delete 断点号 断点号... //删除一个或多个断点

  diable 断点号 断点号... //禁止一个或多个断点

学习啦在线学习网   enable 断点号 断点号... //打开一个或多个断点

学习啦在线学习网   command 断点号 //断点触发时,执行命令,一般用于打印变量

学习啦在线学习网   (gdb) command 1

  Type commands for breakpoint(s) 1, one per line.

学习啦在线学习网   End with a line saying just "end".

  >print x

  >end

  (gdb)

  4.检测点

  watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

  rwatch //当表达式(变量)expr被读时,停住程序。

学习啦在线学习网   awatch //当表达式(变量)的值被读或被写时,停住程序。

  info watchpoints //列出当前所设置了的所有观察点。

  经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

学习啦在线学习网   比如:观察examined_rows变量神马时候被修改

  (1).p &examined_rows,得到地址

学习啦在线学习网   (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

  set print element 0 //输出完整的字符串

学习啦在线学习网   set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

学习啦在线学习网   print {type} variable

  比如:

  (gdb) p {ABC} 0x7fffffffe710

  

学习啦在线学习网linux gdb调试基本命令

  近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

  前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

  gdb program //最常用的用gdb启动程序,开始调试的方式

  gdb program core //用gdb查看core dump文件,跟踪程序core的原因

  gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

  gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

学习啦在线学习网   (1)执行命令模式

学习啦在线学习网   -batch选项。

  比如:打印$pid进程所有线程的堆栈并退出。

  gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

  (2).交互模式

学习啦在线学习网   run //运行程序

学习啦在线学习网   continue //中断后继续运行到下一个断点

  step //单步执行,进入函数

  next //单步执行

  return //函数未执行完,忽略未执行的语句,返回。

学习啦在线学习网   finish //函数执行完毕返回。

学习啦在线学习网   call //调用某一个函数 fun("1234")

  (backtrace)bt //显示栈桢

学习啦在线学习网   bt N //显示开头N个栈桢

  bt -N //显示最后N个栈桢

学习啦在线学习网   (frame)f N //显示第N层栈桢

  list //显示源码

  set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

  continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

学习啦在线学习网   break 函数名 //设置断在某个函数

  break 文件名:行号 //设置断在某一行

  info break //查看设置的断点信息

  break if condition //条件断点

学习啦在线学习网   break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

  delete 断点号 断点号... //删除一个或多个断点

学习啦在线学习网   diable 断点号 断点号... //禁止一个或多个断点

  enable 断点号 断点号... //打开一个或多个断点

学习啦在线学习网   command 断点号 //断点触发时,执行命令,一般用于打印变量

学习啦在线学习网   (gdb) command 1

  Type commands for breakpoint(s) 1, one per line.

学习啦在线学习网   End with a line saying just "end".

  >print x

  >end

  (gdb)

  4.检测点

  watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

学习啦在线学习网   rwatch //当表达式(变量)expr被读时,停住程序。

  awatch //当表达式(变量)的值被读或被写时,停住程序。

  info watchpoints //列出当前所设置了的所有观察点。

  经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

  比如:观察examined_rows变量神马时候被修改

  (1).p &examined_rows,得到地址

学习啦在线学习网   (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

学习啦在线学习网   set print element 0 //输出完整的字符串

  set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

  print {type} variable

  比如:

  (gdb) p {ABC} 0x7fffffffe710

  

学习啦在线学习网linux gdb调试基本命令

  近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

  前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

学习啦在线学习网   gdb program //最常用的用gdb启动程序,开始调试的方式

学习啦在线学习网   gdb program core //用gdb查看core dump文件,跟踪程序core的原因

  gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

  gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

学习啦在线学习网   (1)执行命令模式

学习啦在线学习网   -batch选项。

学习啦在线学习网   比如:打印$pid进程所有线程的堆栈并退出。

  gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

  (2).交互模式

  run //运行程序

  continue //中断后继续运行到下一个断点

学习啦在线学习网   step //单步执行,进入函数

  next //单步执行

学习啦在线学习网   return //函数未执行完,忽略未执行的语句,返回。

  finish //函数执行完毕返回。

  call //调用某一个函数 fun("1234")

学习啦在线学习网   (backtrace)bt //显示栈桢

  bt N //显示开头N个栈桢

  bt -N //显示最后N个栈桢

学习啦在线学习网   (frame)f N //显示第N层栈桢

学习啦在线学习网   list //显示源码

学习啦在线学习网   set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

  continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

  break 函数名 //设置断在某个函数

学习啦在线学习网   break 文件名:行号 //设置断在某一行

  info break //查看设置的断点信息

  break if condition //条件断点

  break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

  delete 断点号 断点号... //删除一个或多个断点

  diable 断点号 断点号... //禁止一个或多个断点

学习啦在线学习网   enable 断点号 断点号... //打开一个或多个断点

  command 断点号 //断点触发时,执行命令,一般用于打印变量

  (gdb) command 1

学习啦在线学习网   Type commands for breakpoint(s) 1, one per line.

  End with a line saying just "end".

  >print x

  >end

  (gdb)

  4.检测点

学习啦在线学习网   watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

  rwatch //当表达式(变量)expr被读时,停住程序。

学习啦在线学习网   awatch //当表达式(变量)的值被读或被写时,停住程序。

  info watchpoints //列出当前所设置了的所有观察点。

学习啦在线学习网   经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

学习啦在线学习网   比如:观察examined_rows变量神马时候被修改

  (1).p &examined_rows,得到地址

  (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

  set print element 0 //输出完整的字符串

  set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

学习啦在线学习网   print {type} variable

  比如:

  (gdb) p {ABC} 0x7fffffffe710

  

学习啦在线学习网linux gdb调试基本命令

  近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

学习啦在线学习网   前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

  gdb program //最常用的用gdb启动程序,开始调试的方式

学习啦在线学习网   gdb program core //用gdb查看core dump文件,跟踪程序core的原因

  gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

学习啦在线学习网   gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

  (1)执行命令模式

学习啦在线学习网   -batch选项。

  比如:打印$pid进程所有线程的堆栈并退出。

学习啦在线学习网   gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

  (2).交互模式

学习啦在线学习网   run //运行程序

  continue //中断后继续运行到下一个断点

  step //单步执行,进入函数

  next //单步执行

学习啦在线学习网   return //函数未执行完,忽略未执行的语句,返回。

  finish //函数执行完毕返回。

  call //调用某一个函数 fun("1234")

  (backtrace)bt //显示栈桢

学习啦在线学习网   bt N //显示开头N个栈桢

学习啦在线学习网   bt -N //显示最后N个栈桢

学习啦在线学习网   (frame)f N //显示第N层栈桢

  list //显示源码

学习啦在线学习网   set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

  continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

  break 函数名 //设置断在某个函数

  break 文件名:行号 //设置断在某一行

  info break //查看设置的断点信息

学习啦在线学习网   break if condition //条件断点

  break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

  delete 断点号 断点号... //删除一个或多个断点

学习啦在线学习网   diable 断点号 断点号... //禁止一个或多个断点

  enable 断点号 断点号... //打开一个或多个断点

学习啦在线学习网   command 断点号 //断点触发时,执行命令,一般用于打印变量

  (gdb) command 1

学习啦在线学习网   Type commands for breakpoint(s) 1, one per line.

  End with a line saying just "end".

学习啦在线学习网   >print x

  >end

  (gdb)

  4.检测点

学习啦在线学习网   watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

  rwatch //当表达式(变量)expr被读时,停住程序。

  awatch //当表达式(变量)的值被读或被写时,停住程序。

学习啦在线学习网   info watchpoints //列出当前所设置了的所有观察点。

  经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

学习啦在线学习网   比如:观察examined_rows变量神马时候被修改

学习啦在线学习网   (1).p &examined_rows,得到地址

学习啦在线学习网   (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

  set print element 0 //输出完整的字符串

  set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

  print {type} variable

  比如:

  (gdb) p {ABC} 0x7fffffffe710

  

linux gdb调试基本命令

  近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

学习啦在线学习网   前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

  gdb program //最常用的用gdb启动程序,开始调试的方式

  gdb program core //用gdb查看core dump文件,跟踪程序core的原因

  gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

  gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

学习啦在线学习网   (1)执行命令模式

学习啦在线学习网   -batch选项。

  比如:打印$pid进程所有线程的堆栈并退出。

学习啦在线学习网   gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

学习啦在线学习网   (2).交互模式

学习啦在线学习网   run //运行程序

  continue //中断后继续运行到下一个断点

学习啦在线学习网   step //单步执行,进入函数

  next //单步执行

  return //函数未执行完,忽略未执行的语句,返回。

学习啦在线学习网   finish //函数执行完毕返回。

  call //调用某一个函数 fun("1234")

学习啦在线学习网   (backtrace)bt //显示栈桢

  bt N //显示开头N个栈桢

  bt -N //显示最后N个栈桢

学习啦在线学习网   (frame)f N //显示第N层栈桢

学习啦在线学习网   list //显示源码

学习啦在线学习网   set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

学习啦在线学习网   continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

学习啦在线学习网   break 函数名 //设置断在某个函数

  break 文件名:行号 //设置断在某一行

学习啦在线学习网   info break //查看设置的断点信息

学习啦在线学习网   break if condition //条件断点

学习啦在线学习网   break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

学习啦在线学习网   delete 断点号 断点号... //删除一个或多个断点

学习啦在线学习网   diable 断点号 断点号... //禁止一个或多个断点

学习啦在线学习网   enable 断点号 断点号... //打开一个或多个断点

  command 断点号 //断点触发时,执行命令,一般用于打印变量

  (gdb) command 1

学习啦在线学习网   Type commands for breakpoint(s) 1, one per line.

学习啦在线学习网   End with a line saying just "end".

  >print x

  >end

  (gdb)

  4.检测点

  watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

  rwatch //当表达式(变量)expr被读时,停住程序。

  awatch //当表达式(变量)的值被读或被写时,停住程序。

  info watchpoints //列出当前所设置了的所有观察点。

  经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

学习啦在线学习网   比如:观察examined_rows变量神马时候被修改

  (1).p &examined_rows,得到地址

学习啦在线学习网   (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

  set print element 0 //输出完整的字符串

  set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

学习啦在线学习网   print {type} variable

  比如:

学习啦在线学习网   (gdb) p {ABC} 0x7fffffffe710

  

linux gdb调试基本命令

  近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

  前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

学习啦在线学习网   gdb program //最常用的用gdb启动程序,开始调试的方式

  gdb program core //用gdb查看core dump文件,跟踪程序core的原因

  gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

  gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

学习啦在线学习网   (1)执行命令模式

学习啦在线学习网   -batch选项。

学习啦在线学习网   比如:打印$pid进程所有线程的堆栈并退出。

  gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

学习啦在线学习网   (2).交互模式

学习啦在线学习网   run //运行程序

  continue //中断后继续运行到下一个断点

  step //单步执行,进入函数

  next //单步执行

  return //函数未执行完,忽略未执行的语句,返回。

  finish //函数执行完毕返回。

  call //调用某一个函数 fun("1234")

  (backtrace)bt //显示栈桢

  bt N //显示开头N个栈桢

学习啦在线学习网   bt -N //显示最后N个栈桢

学习啦在线学习网   (frame)f N //显示第N层栈桢

学习啦在线学习网   list //显示源码

  set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

  continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

学习啦在线学习网   break 函数名 //设置断在某个函数

学习啦在线学习网   break 文件名:行号 //设置断在某一行

学习啦在线学习网   info break //查看设置的断点信息

  break if condition //条件断点

学习啦在线学习网   break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

  delete 断点号 断点号... //删除一个或多个断点

  diable 断点号 断点号... //禁止一个或多个断点

  enable 断点号 断点号... //打开一个或多个断点

学习啦在线学习网   command 断点号 //断点触发时,执行命令,一般用于打印变量

  (gdb) command 1

学习啦在线学习网   Type commands for breakpoint(s) 1, one per line.

学习啦在线学习网   End with a line saying just "end".

学习啦在线学习网   >print x

  >end

  (gdb)

  4.检测点

  watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

  rwatch //当表达式(变量)expr被读时,停住程序。

  awatch //当表达式(变量)的值被读或被写时,停住程序。

  info watchpoints //列出当前所设置了的所有观察点。

  经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

学习啦在线学习网   比如:观察examined_rows变量神马时候被修改

  (1).p &examined_rows,得到地址

学习啦在线学习网   (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

  set print element 0 //输出完整的字符串

  set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

学习啦在线学习网   print {type} variable

  比如:

  (gdb) p {ABC} 0x7fffffffe710

  

linux gdb调试基本命令

  近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

学习啦在线学习网   前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

  gdb program //最常用的用gdb启动程序,开始调试的方式

学习啦在线学习网   gdb program core //用gdb查看core dump文件,跟踪程序core的原因

  gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

学习啦在线学习网   gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

学习啦在线学习网   (1)执行命令模式

学习啦在线学习网   -batch选项。

学习啦在线学习网   比如:打印$pid进程所有线程的堆栈并退出。

学习啦在线学习网   gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

  (2).交互模式

学习啦在线学习网   run //运行程序

  continue //中断后继续运行到下一个断点

学习啦在线学习网   step //单步执行,进入函数

  next //单步执行

  return //函数未执行完,忽略未执行的语句,返回。

  finish //函数执行完毕返回。

  call //调用某一个函数 fun("1234")

  (backtrace)bt //显示栈桢

  bt N //显示开头N个栈桢

学习啦在线学习网   bt -N //显示最后N个栈桢

学习啦在线学习网   (frame)f N //显示第N层栈桢

  list //显示源码

  set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

  continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

  break 函数名 //设置断在某个函数

  break 文件名:行号 //设置断在某一行

学习啦在线学习网   info break //查看设置的断点信息

  break if condition //条件断点

  break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

  delete 断点号 断点号... //删除一个或多个断点

学习啦在线学习网   diable 断点号 断点号... //禁止一个或多个断点

学习啦在线学习网   enable 断点号 断点号... //打开一个或多个断点

学习啦在线学习网   command 断点号 //断点触发时,执行命令,一般用于打印变量

学习啦在线学习网   (gdb) command 1

  Type commands for breakpoint(s) 1, one per line.

  End with a line saying just "end".

  >print x

  >end

  (gdb)

  4.检测点

学习啦在线学习网   watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

  rwatch //当表达式(变量)expr被读时,停住程序。

  awatch //当表达式(变量)的值被读或被写时,停住程序。

学习啦在线学习网   info watchpoints //列出当前所设置了的所有观察点。

学习啦在线学习网   经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

  比如:观察examined_rows变量神马时候被修改

  (1).p &examined_rows,得到地址

学习啦在线学习网   (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

学习啦在线学习网   set print elements N //指定打印的长度,对长字符串特别有用。

  set print element 0 //输出完整的字符串

  set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

学习啦在线学习网   print {type} variable

  比如:

  (gdb) p {ABC} 0x7fffffffe710

  

学习啦在线学习网linux gdb调试基本命令

  近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

学习啦在线学习网   前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

学习啦在线学习网   gdb program //最常用的用gdb启动程序,开始调试的方式

  gdb program core //用gdb查看core dump文件,跟踪程序core的原因

学习啦在线学习网   gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

  gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

  (1)执行命令模式

学习啦在线学习网   -batch选项。

  比如:打印$pid进程所有线程的堆栈并退出。

  gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

  (2).交互模式

学习啦在线学习网   run //运行程序

  continue //中断后继续运行到下一个断点

学习啦在线学习网   step //单步执行,进入函数

  next //单步执行

  return //函数未执行完,忽略未执行的语句,返回。

学习啦在线学习网   finish //函数执行完毕返回。

学习啦在线学习网   call //调用某一个函数 fun("1234")

  (backtrace)bt //显示栈桢

学习啦在线学习网   bt N //显示开头N个栈桢

  bt -N //显示最后N个栈桢

  (frame)f N //显示第N层栈桢

  list //显示源码

学习啦在线学习网   set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

  continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

  break 函数名 //设置断在某个函数

  break 文件名:行号 //设置断在某一行

  info break //查看设置的断点信息

  break if condition //条件断点

学习啦在线学习网   break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

  delete 断点号 断点号... //删除一个或多个断点

  diable 断点号 断点号... //禁止一个或多个断点

  enable 断点号 断点号... //打开一个或多个断点

学习啦在线学习网   command 断点号 //断点触发时,执行命令,一般用于打印变量

学习啦在线学习网   (gdb) command 1

  Type commands for breakpoint(s) 1, one per line.

  End with a line saying just "end".

  >print x

  >end

  (gdb)

  4.检测点

  watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

学习啦在线学习网   rwatch //当表达式(变量)expr被读时,停住程序。

学习啦在线学习网   awatch //当表达式(变量)的值被读或被写时,停住程序。

学习啦在线学习网   info watchpoints //列出当前所设置了的所有观察点。

学习啦在线学习网   经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

  比如:观察examined_rows变量神马时候被修改

学习啦在线学习网   (1).p &examined_rows,得到地址

学习啦在线学习网   (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

学习啦在线学习网   set print elements N //指定打印的长度,对长字符串特别有用。

  set print element 0 //输出完整的字符串

  set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

学习啦在线学习网   print {type} variable

  比如:

  (gdb) p {ABC} 0x7fffffffe710

  

学习啦在线学习网linux gdb调试基本命令

学习啦在线学习网   近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

学习啦在线学习网   前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

学习啦在线学习网   gdb program //最常用的用gdb启动程序,开始调试的方式

学习啦在线学习网   gdb program core //用gdb查看core dump文件,跟踪程序core的原因

学习啦在线学习网   gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

学习啦在线学习网   gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

  (1)执行命令模式

  -batch选项。

学习啦在线学习网   比如:打印$pid进程所有线程的堆栈并退出。

  gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

  (2).交互模式

  run //运行程序

  continue //中断后继续运行到下一个断点

学习啦在线学习网   step //单步执行,进入函数

学习啦在线学习网   next //单步执行

学习啦在线学习网   return //函数未执行完,忽略未执行的语句,返回。

  finish //函数执行完毕返回。

  call //调用某一个函数 fun("1234")

  (backtrace)bt //显示栈桢

  bt N //显示开头N个栈桢

学习啦在线学习网   bt -N //显示最后N个栈桢

  (frame)f N //显示第N层栈桢

  list //显示源码

  set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

学习啦在线学习网   continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

  break 函数名 //设置断在某个函数

  break 文件名:行号 //设置断在某一行

  info break //查看设置的断点信息

学习啦在线学习网   break if condition //条件断点

学习啦在线学习网   break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

学习啦在线学习网   delete 断点号 断点号... //删除一个或多个断点

学习啦在线学习网   diable 断点号 断点号... //禁止一个或多个断点

  enable 断点号 断点号... //打开一个或多个断点

  command 断点号 //断点触发时,执行命令,一般用于打印变量

学习啦在线学习网   (gdb) command 1

  Type commands for breakpoint(s) 1, one per line.

学习啦在线学习网   End with a line saying just "end".

学习啦在线学习网   >print x

  >end

  (gdb)

  4.检测点

学习啦在线学习网   watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

  rwatch //当表达式(变量)expr被读时,停住程序。

  awatch //当表达式(变量)的值被读或被写时,停住程序。

  info watchpoints //列出当前所设置了的所有观察点。

  经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

学习啦在线学习网   比如:观察examined_rows变量神马时候被修改

学习啦在线学习网   (1).p &examined_rows,得到地址

  (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

学习啦在线学习网   set print element 0 //输出完整的字符串

学习啦在线学习网   set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

学习啦在线学习网   print {type} variable

  比如:

学习啦在线学习网   (gdb) p {ABC} 0x7fffffffe710

  

学习啦在线学习网linux gdb调试基本命令

学习啦在线学习网   近年来,随着嵌入式技术飞速发展,嵌入式产品随处可见,Linux的应用也越来越广泛。接下来是小编为大家收集的linux gdb调试基本命令,希望能帮到大家。

  linux gdb调试基本命令

  1.启动调试

  前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。

  gdb program //最常用的用gdb启动程序,开始调试的方式

  gdb program core //用gdb查看core dump文件,跟踪程序core的原因

学习啦在线学习网   gdb program pid //用gdb调试已经开始运行的程序,指定pid即可

  gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可

  2.调试命令

  (1)执行命令模式

  -batch选项。

学习啦在线学习网   比如:打印$pid进程所有线程的堆栈并退出。

  gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

  (2).交互模式

  run //运行程序

学习啦在线学习网   continue //中断后继续运行到下一个断点

学习啦在线学习网   step //单步执行,进入函数

  next //单步执行

  return //函数未执行完,忽略未执行的语句,返回。

学习啦在线学习网   finish //函数执行完毕返回。

学习啦在线学习网   call //调用某一个函数 fun("1234")

  (backtrace)bt //显示栈桢

学习啦在线学习网   bt N //显示开头N个栈桢

  bt -N //显示最后N个栈桢

  (frame)f N //显示第N层栈桢

  list //显示源码

  set directory //设置gdb的工作目录

  pwd //当前的工作目录

  (3)反复执行

学习啦在线学习网   continue N //连续执行cointiue N次,一般用于避免频繁断点

  step N

  next N

  3.断点

  break 函数名 //设置断在某个函数

  break 文件名:行号 //设置断在某一行

  info break //查看设置的断点信息

  break if condition //条件断点

  break 函数名 thread 线程号 //设置断点只断某个线程,通过info threads 查看线程号

学习啦在线学习网   delete 断点号 断点号... //删除一个或多个断点

学习啦在线学习网   diable 断点号 断点号... //禁止一个或多个断点

  enable 断点号 断点号... //打开一个或多个断点

  command 断点号 //断点触发时,执行命令,一般用于打印变量

  (gdb) command 1

  Type commands for breakpoint(s) 1, one per line.

  End with a line saying just "end".

  >print x

  >end

  (gdb)

  4.检测点

  watch //为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

学习啦在线学习网   rwatch //当表达式(变量)expr被读时,停住程序。

  awatch //当表达式(变量)的值被读或被写时,停住程序。

  info watchpoints //列出当前所设置了的所有观察点。

学习啦在线学习网   经验:观察某个变量是否变化,被读或者被写,由于变量只在某一个作用域,可以获取变量的地址,然后观察。

学习啦在线学习网   比如:观察examined_rows变量神马时候被修改

  (1).p &examined_rows,得到地址

  (2).watch *(ha_rows *) 0x7ffec8005e28,则可以观察这个变量的变化情况。

  5.查看变量

  (1)设置

  set print elements N //指定打印的长度,对长字符串特别有用。

  set print element 0 //输出完整的字符串

  set print pretty //设置GDB打印结构的时候,每行一个成员,并且有相应的缩进,缺省是关闭的

  print {type} variable

  比如:

学习啦在线学习网   (gdb) p {ABC} 0x7fffffffe710

学习啦在线学习网   $2 = {val = 1.5, val2 = 10}

  print xxx //打印变量

  p /x xxx //16进制显示

  p str@str_len //打印字符串

学习啦在线学习网   info locals //打印出当前函数中所有局部变量及其值。

学习啦在线学习网   info args //打印出当前函数的参数名及其值。

  display 变量 //自动打印变量

  undisplay //取消自动打印

学习啦在线学习网   注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

学习啦在线学习网   格式: x /nfu <addr> x 是 examine 的缩写

学习啦在线学习网   a.n表示要显示的内存单元的个数

  b.f表示显示方式, 可取如下值

  (1).x 按十六进制格式显示变量。

学习啦在线学习网   (2).d 按十进制格式显示变量。

学习啦在线学习网   (3).u 按十进制格式显示无符号整型。

  (4).o 按八进制格式显示变量。

  (5).t 按二进制格式显示变量。

学习啦在线学习网   (6).a 按十六进制格式显示变量。

  (7).i 指令地址格式

  (8).c 按字符格式显示变量。

学习啦在线学习网   (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

学习啦在线学习网   (1).b表示单字节,

  (2).h表示双字节,

学习啦在线学习网   (3).w表示四字节,

学习啦在线学习网   (4).g表示八字节

  比如:x/3xh buf

  表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

学习啦在线学习网   thread thread_no //切换到线程号

学习啦在线学习网   thread apply all command //所有线程都执行命令打印栈桢

学习啦在线学习网   比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

学习啦在线学习网   show scheduler-locking

  set scheduler-locking on

  set scheduler-locking off

  默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

  但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

学习啦在线学习网   这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

  (2)non-stop模式(7.0以后的版本支持)

学习啦在线学习网   set target-async 1

  set pagination off

  set non-stop on

学习啦在线学习网   gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

学习啦在线学习网   (1).singal 发送信号

  假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

  要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

学习啦在线学习网   (gdb) signal 2

  (2).handle 拦截信号

学习啦在线学习网   Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

  * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

学习啦在线学习网   * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

  * print 接受到信号时显示一条消息

  * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

  * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

  * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

  handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

学习啦在线学习网   handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

  9.生成环境使用GDB场景

  内核转储(coredump)

学习啦在线学习网   (1).配置产生core文件

  前置条件:确保系统配置的core file size足够,一般设置成unlimited

  ulimit -c unlimited

学习啦在线学习网   配置corefile的参数:

  echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

  mkdir /tmp/corefiles

学习啦在线学习网   chmod 777 /tmp/corefiles

学习啦在线学习网   echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

学习啦在线学习网   echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

  a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

学习啦在线学习网   b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

  (2).使用core文件

  gdb /usr/MySQL/bin/mysqld core.24556

  (3).dump已经运行进程的状态信息

学习啦在线学习网   gdb attach pid

学习啦在线学习网   (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

  另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

  (4).打印线程信息

  pstack pid

学习啦在线学习网   pt-pmp -p pid

学习啦在线学习网   pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

  (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

  比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

学习啦在线学习网   addr2line -e /usr/mysql/bin/mysqld 0x64bd60

  /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

  http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

  GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

学习啦在线学习网   GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

  使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

  在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

学习啦在线学习网   Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

学习啦在线学习网   Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

  使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

学习啦在线学习网 = {val = 1.5, val2 = 10}

学习啦在线学习网   print xxx //打印变量

  p /x xxx //16进制显示

  p str@str_len //打印字符串

学习啦在线学习网   info locals //打印出当前函数中所有局部变量及其值。

  info args //打印出当前函数的参数名及其值。

学习啦在线学习网   display 变量 //自动打印变量

  undisplay //取消自动打印

学习啦在线学习网   注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

  格式: x /nfu <addr> x 是 examine 的缩写

  a.n表示要显示的内存单元的个数

学习啦在线学习网   b.f表示显示方式, 可取如下值

  (1).x 按十六进制格式显示变量。

学习啦在线学习网   (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

  (4).o 按八进制格式显示变量。

学习啦在线学习网   (5).t 按二进制格式显示变量。

  (6).a 按十六进制格式显示变量。

学习啦在线学习网   (7).i 指令地址格式

  (8).c 按字符格式显示变量。

  (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

  (1).b表示单字节,

  (2).h表示双字节,

学习啦在线学习网   (3).w表示四字节,

学习啦在线学习网   (4).g表示八字节

  比如:x/3xh buf

学习啦在线学习网   表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

学习啦在线学习网   thread thread_no //切换到线程号

  thread apply all command //所有线程都执行命令打印栈桢

学习啦在线学习网   比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

  show scheduler-locking

  set scheduler-locking on

学习啦在线学习网   set scheduler-locking off

  默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

  但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

  这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

学习啦在线学习网   (2)non-stop模式(7.0以后的版本支持)

  set target-async 1

  set pagination off

  set non-stop on

学习啦在线学习网   gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

  (1).singal 发送信号

  假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

学习啦在线学习网   要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

  (gdb) signal 2

学习啦在线学习网   (2).handle 拦截信号

  Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

  * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

学习啦在线学习网   * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

  * print 接受到信号时显示一条消息

  * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

学习啦在线学习网   * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

学习啦在线学习网   * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

学习啦在线学习网   handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

学习啦在线学习网   handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

  9.生成环境使用GDB场景

学习啦在线学习网   内核转储(coredump)

  (1).配置产生core文件

学习啦在线学习网   前置条件:确保系统配置的core file size足够,一般设置成unlimited

学习啦在线学习网   ulimit -c unlimited

  配置corefile的参数:

学习啦在线学习网   echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

  mkdir /tmp/corefiles

  chmod 777 /tmp/corefiles

  echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

  echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

  a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

学习啦在线学习网   b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

学习啦在线学习网   c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

  (2).使用core文件

  gdb /usr/MySQL/bin/mysqld core.24556

  (3).dump已经运行进程的状态信息

学习啦在线学习网   gdb attach pid

学习啦在线学习网   (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

学习啦在线学习网   另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

学习啦在线学习网   (4).打印线程信息

学习啦在线学习网   pstack pid

学习啦在线学习网   pt-pmp -p pid

  pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

  (5).altert日志

学习啦在线学习网   这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

  比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

  addr2line -e /usr/mysql/bin/mysqld 0x64bd60

  /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

  http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

  GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

  GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

学习啦在线学习网   使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

  在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

  Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

学习啦在线学习网   Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

  使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

= {val = 1.5, val2 = 10}

  print xxx //打印变量

  p /x xxx //16进制显示

学习啦在线学习网   p str@str_len //打印字符串

  info locals //打印出当前函数中所有局部变量及其值。

  info args //打印出当前函数的参数名及其值。

学习啦在线学习网   display 变量 //自动打印变量

  undisplay //取消自动打印

  注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

  格式: x /nfu <addr> x 是 examine 的缩写

学习啦在线学习网   a.n表示要显示的内存单元的个数

学习啦在线学习网   b.f表示显示方式, 可取如下值

学习啦在线学习网   (1).x 按十六进制格式显示变量。

  (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

  (4).o 按八进制格式显示变量。

学习啦在线学习网   (5).t 按二进制格式显示变量。

  (6).a 按十六进制格式显示变量。

学习啦在线学习网   (7).i 指令地址格式

学习啦在线学习网   (8).c 按字符格式显示变量。

  (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

学习啦在线学习网   (1).b表示单字节,

学习啦在线学习网   (2).h表示双字节,

  (3).w表示四字节,

学习啦在线学习网   (4).g表示八字节

学习啦在线学习网   比如:x/3xh buf

学习啦在线学习网   表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

  thread thread_no //切换到线程号

学习啦在线学习网   thread apply all command //所有线程都执行命令打印栈桢

  比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

学习啦在线学习网   show scheduler-locking

  set scheduler-locking on

  set scheduler-locking off

  默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

  但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

  这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

学习啦在线学习网   (2)non-stop模式(7.0以后的版本支持)

学习啦在线学习网   set target-async 1

学习啦在线学习网   set pagination off

学习啦在线学习网   set non-stop on

  gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

学习啦在线学习网   (1).singal 发送信号

学习啦在线学习网   假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

学习啦在线学习网   要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

  (gdb) signal 2

  (2).handle 拦截信号

学习啦在线学习网   Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

  * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

学习啦在线学习网   * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

  * print 接受到信号时显示一条消息

  * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

学习啦在线学习网   * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

  * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

  handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

  handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

学习啦在线学习网   9.生成环境使用GDB场景

  内核转储(coredump)

学习啦在线学习网   (1).配置产生core文件

  前置条件:确保系统配置的core file size足够,一般设置成unlimited

学习啦在线学习网   ulimit -c unlimited

  配置corefile的参数:

  echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

  mkdir /tmp/corefiles

  chmod 777 /tmp/corefiles

  echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

  echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

学习啦在线学习网   a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

  b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

学习啦在线学习网   (2).使用core文件

学习啦在线学习网   gdb /usr/MySQL/bin/mysqld core.24556

  (3).dump已经运行进程的状态信息

学习啦在线学习网   gdb attach pid

学习啦在线学习网   (gdb) generate-core-file

学习啦在线学习网   调试完毕后,通过detach命令退出。

  另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

  (4).打印线程信息

  pstack pid

  pt-pmp -p pid

  pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

  (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

学习啦在线学习网   比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

学习啦在线学习网   addr2line -e /usr/mysql/bin/mysqld 0x64bd60

学习啦在线学习网   /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

  http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

  GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

  GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

  使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

学习啦在线学习网   在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

  Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

学习啦在线学习网   Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

  使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


学习啦在线学习网 看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

= {val = 1.5, val2 = 10}

学习啦在线学习网   print xxx //打印变量

  p /x xxx //16进制显示

  p str@str_len //打印字符串

学习啦在线学习网   info locals //打印出当前函数中所有局部变量及其值。

学习啦在线学习网   info args //打印出当前函数的参数名及其值。

学习啦在线学习网   display 变量 //自动打印变量

学习啦在线学习网   undisplay //取消自动打印

  注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

  格式: x /nfu <addr> x 是 examine 的缩写

学习啦在线学习网   a.n表示要显示的内存单元的个数

  b.f表示显示方式, 可取如下值

学习啦在线学习网   (1).x 按十六进制格式显示变量。

学习啦在线学习网   (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

学习啦在线学习网   (4).o 按八进制格式显示变量。

  (5).t 按二进制格式显示变量。

  (6).a 按十六进制格式显示变量。

  (7).i 指令地址格式

学习啦在线学习网   (8).c 按字符格式显示变量。

  (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

  (1).b表示单字节,

学习啦在线学习网   (2).h表示双字节,

  (3).w表示四字节,

  (4).g表示八字节

  比如:x/3xh buf

  表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

  thread thread_no //切换到线程号

  thread apply all command //所有线程都执行命令打印栈桢

学习啦在线学习网   比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

学习啦在线学习网   show scheduler-locking

学习啦在线学习网   set scheduler-locking on

学习啦在线学习网   set scheduler-locking off

学习啦在线学习网   默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

  但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

  这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

  (2)non-stop模式(7.0以后的版本支持)

  set target-async 1

  set pagination off

学习啦在线学习网   set non-stop on

学习啦在线学习网   gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

  (1).singal 发送信号

学习啦在线学习网   假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

  要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

  (gdb) signal 2

  (2).handle 拦截信号

  Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

学习啦在线学习网   * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

  * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

  * print 接受到信号时显示一条消息

学习啦在线学习网   * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

学习啦在线学习网   * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

  * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

  handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

学习啦在线学习网   handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

  9.生成环境使用GDB场景

  内核转储(coredump)

  (1).配置产生core文件

  前置条件:确保系统配置的core file size足够,一般设置成unlimited

学习啦在线学习网   ulimit -c unlimited

  配置corefile的参数:

  echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

学习啦在线学习网   mkdir /tmp/corefiles

  chmod 777 /tmp/corefiles

学习啦在线学习网   echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

  echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

学习啦在线学习网   a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

学习啦在线学习网   b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

  (2).使用core文件

  gdb /usr/MySQL/bin/mysqld core.24556

  (3).dump已经运行进程的状态信息

  gdb attach pid

  (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

  另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

学习啦在线学习网   (4).打印线程信息

学习啦在线学习网   pstack pid

学习啦在线学习网   pt-pmp -p pid

  pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

  (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

  比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

学习啦在线学习网   addr2line -e /usr/mysql/bin/mysqld 0x64bd60

  /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

  http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

学习啦在线学习网   GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

学习啦在线学习网   GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

  使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

学习啦在线学习网   在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

学习啦在线学习网   Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

学习啦在线学习网   Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

  使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


学习啦在线学习网 看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

学习啦在线学习网 = {val = 1.5, val2 = 10}

学习啦在线学习网   print xxx //打印变量

  p /x xxx //16进制显示

学习啦在线学习网   p str@str_len //打印字符串

  info locals //打印出当前函数中所有局部变量及其值。

  info args //打印出当前函数的参数名及其值。

学习啦在线学习网   display 变量 //自动打印变量

  undisplay //取消自动打印

  注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

学习啦在线学习网   格式: x /nfu <addr> x 是 examine 的缩写

  a.n表示要显示的内存单元的个数

学习啦在线学习网   b.f表示显示方式, 可取如下值

  (1).x 按十六进制格式显示变量。

  (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

  (4).o 按八进制格式显示变量。

  (5).t 按二进制格式显示变量。

学习啦在线学习网   (6).a 按十六进制格式显示变量。

  (7).i 指令地址格式

  (8).c 按字符格式显示变量。

  (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

  (1).b表示单字节,

  (2).h表示双字节,

  (3).w表示四字节,

  (4).g表示八字节

学习啦在线学习网   比如:x/3xh buf

学习啦在线学习网   表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

学习啦在线学习网   info threads //查看线程

学习啦在线学习网   thread thread_no //切换到线程号

学习啦在线学习网   thread apply all command //所有线程都执行命令打印栈桢

学习啦在线学习网   比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

学习啦在线学习网   show scheduler-locking

  set scheduler-locking on

学习啦在线学习网   set scheduler-locking off

学习啦在线学习网   默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

学习啦在线学习网   但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

学习啦在线学习网   这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

学习啦在线学习网   (2)non-stop模式(7.0以后的版本支持)

学习啦在线学习网   set target-async 1

  set pagination off

  set non-stop on

学习啦在线学习网   gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

  (1).singal 发送信号

  假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

  要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

学习啦在线学习网   (gdb) signal 2

学习啦在线学习网   (2).handle 拦截信号

  Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

学习啦在线学习网   * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

  * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

学习啦在线学习网   * print 接受到信号时显示一条消息

  * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

学习啦在线学习网   * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

学习啦在线学习网   * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

  handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

  handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

  9.生成环境使用GDB场景

学习啦在线学习网   内核转储(coredump)

  (1).配置产生core文件

  前置条件:确保系统配置的core file size足够,一般设置成unlimited

  ulimit -c unlimited

  配置corefile的参数:

  echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

学习啦在线学习网   mkdir /tmp/corefiles

学习啦在线学习网   chmod 777 /tmp/corefiles

  echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

  echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

  a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

学习啦在线学习网   b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

  (2).使用core文件

  gdb /usr/MySQL/bin/mysqld core.24556

  (3).dump已经运行进程的状态信息

  gdb attach pid

学习啦在线学习网   (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

学习啦在线学习网   另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

学习啦在线学习网   (4).打印线程信息

  pstack pid

学习啦在线学习网   pt-pmp -p pid

  pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

学习啦在线学习网   (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

学习啦在线学习网   比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

  addr2line -e /usr/mysql/bin/mysqld 0x64bd60

  /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

  http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

学习啦在线学习网   GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

学习啦在线学习网   GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

  使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

  在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

  Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

学习啦在线学习网   Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

  使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


学习啦在线学习网 看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

= {val = 1.5, val2 = 10}

  print xxx //打印变量

  p /x xxx //16进制显示

  p str@str_len //打印字符串

  info locals //打印出当前函数中所有局部变量及其值。

学习啦在线学习网   info args //打印出当前函数的参数名及其值。

  display 变量 //自动打印变量

  undisplay //取消自动打印

  注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

  格式: x /nfu <addr> x 是 examine 的缩写

  a.n表示要显示的内存单元的个数

  b.f表示显示方式, 可取如下值

  (1).x 按十六进制格式显示变量。

学习啦在线学习网   (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

  (4).o 按八进制格式显示变量。

  (5).t 按二进制格式显示变量。

学习啦在线学习网   (6).a 按十六进制格式显示变量。

学习啦在线学习网   (7).i 指令地址格式

  (8).c 按字符格式显示变量。

  (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

  (1).b表示单字节,

  (2).h表示双字节,

学习啦在线学习网   (3).w表示四字节,

  (4).g表示八字节

  比如:x/3xh buf

  表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

学习啦在线学习网   thread thread_no //切换到线程号

学习啦在线学习网   thread apply all command //所有线程都执行命令打印栈桢

学习啦在线学习网   比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

学习啦在线学习网   show scheduler-locking

  set scheduler-locking on

  set scheduler-locking off

  默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

  但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

学习啦在线学习网   这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

学习啦在线学习网   (2)non-stop模式(7.0以后的版本支持)

  set target-async 1

学习啦在线学习网   set pagination off

学习啦在线学习网   set non-stop on

学习啦在线学习网   gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

  (1).singal 发送信号

  假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

  要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

  (gdb) signal 2

学习啦在线学习网   (2).handle 拦截信号

  Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

  * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

学习啦在线学习网   * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

  * print 接受到信号时显示一条消息

  * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

  * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

  * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

学习啦在线学习网   handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

  handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

  9.生成环境使用GDB场景

学习啦在线学习网   内核转储(coredump)

  (1).配置产生core文件

  前置条件:确保系统配置的core file size足够,一般设置成unlimited

  ulimit -c unlimited

学习啦在线学习网   配置corefile的参数:

学习啦在线学习网   echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

  mkdir /tmp/corefiles

  chmod 777 /tmp/corefiles

  echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

  echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

  a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

  b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

  (2).使用core文件

  gdb /usr/MySQL/bin/mysqld core.24556

  (3).dump已经运行进程的状态信息

  gdb attach pid

  (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

学习啦在线学习网   另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

  (4).打印线程信息

  pstack pid

  pt-pmp -p pid

学习啦在线学习网   pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

  (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

学习啦在线学习网   比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

  addr2line -e /usr/mysql/bin/mysqld 0x64bd60

  /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

学习啦在线学习网   http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

学习啦在线学习网   GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

  GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

  使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

  在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

  Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

  Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

学习啦在线学习网   使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


学习啦在线学习网 看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

= {val = 1.5, val2 = 10}

学习啦在线学习网   print xxx //打印变量

学习啦在线学习网   p /x xxx //16进制显示

  p str@str_len //打印字符串

  info locals //打印出当前函数中所有局部变量及其值。

  info args //打印出当前函数的参数名及其值。

  display 变量 //自动打印变量

  undisplay //取消自动打印

  注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

学习啦在线学习网   格式: x /nfu <addr> x 是 examine 的缩写

  a.n表示要显示的内存单元的个数

学习啦在线学习网   b.f表示显示方式, 可取如下值

学习啦在线学习网   (1).x 按十六进制格式显示变量。

  (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

  (4).o 按八进制格式显示变量。

  (5).t 按二进制格式显示变量。

学习啦在线学习网   (6).a 按十六进制格式显示变量。

学习啦在线学习网   (7).i 指令地址格式

  (8).c 按字符格式显示变量。

学习啦在线学习网   (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

  (1).b表示单字节,

  (2).h表示双字节,

  (3).w表示四字节,

  (4).g表示八字节

学习啦在线学习网   比如:x/3xh buf

学习啦在线学习网   表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

学习啦在线学习网   info threads //查看线程

学习啦在线学习网   thread thread_no //切换到线程号

  thread apply all command //所有线程都执行命令打印栈桢

  比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

学习啦在线学习网   show scheduler-locking

  set scheduler-locking on

  set scheduler-locking off

  默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

学习啦在线学习网   但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

学习啦在线学习网   这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

  (2)non-stop模式(7.0以后的版本支持)

学习啦在线学习网   set target-async 1

学习啦在线学习网   set pagination off

学习啦在线学习网   set non-stop on

  gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

学习啦在线学习网   (1).singal 发送信号

  假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

学习啦在线学习网   要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

  (gdb) signal 2

学习啦在线学习网   (2).handle 拦截信号

  Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

  * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

  * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

  * print 接受到信号时显示一条消息

学习啦在线学习网   * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

  * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

  * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

  handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

  handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

学习啦在线学习网   9.生成环境使用GDB场景

  内核转储(coredump)

  (1).配置产生core文件

  前置条件:确保系统配置的core file size足够,一般设置成unlimited

  ulimit -c unlimited

  配置corefile的参数:

学习啦在线学习网   echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

学习啦在线学习网   mkdir /tmp/corefiles

学习啦在线学习网   chmod 777 /tmp/corefiles

学习啦在线学习网   echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

  echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

学习啦在线学习网   a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

  b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

  (2).使用core文件

  gdb /usr/MySQL/bin/mysqld core.24556

  (3).dump已经运行进程的状态信息

  gdb attach pid

  (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

  另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

学习啦在线学习网   (4).打印线程信息

  pstack pid

学习啦在线学习网   pt-pmp -p pid

  pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

学习啦在线学习网   (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

  比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

学习啦在线学习网   addr2line -e /usr/mysql/bin/mysqld 0x64bd60

学习啦在线学习网   /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

  http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

学习啦在线学习网   GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

  GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

  使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

  在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

  Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

  Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

学习啦在线学习网   使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


学习啦在线学习网 看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

学习啦在线学习网 = {val = 1.5, val2 = 10}

  print xxx //打印变量

  p /x xxx //16进制显示

学习啦在线学习网   p str@str_len //打印字符串

  info locals //打印出当前函数中所有局部变量及其值。

  info args //打印出当前函数的参数名及其值。

学习啦在线学习网   display 变量 //自动打印变量

学习啦在线学习网   undisplay //取消自动打印

  注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

  格式: x /nfu <addr> x 是 examine 的缩写

  a.n表示要显示的内存单元的个数

  b.f表示显示方式, 可取如下值

  (1).x 按十六进制格式显示变量。

学习啦在线学习网   (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

  (4).o 按八进制格式显示变量。

  (5).t 按二进制格式显示变量。

学习啦在线学习网   (6).a 按十六进制格式显示变量。

学习啦在线学习网   (7).i 指令地址格式

学习啦在线学习网   (8).c 按字符格式显示变量。

  (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

学习啦在线学习网   (1).b表示单字节,

  (2).h表示双字节,

学习啦在线学习网   (3).w表示四字节,

  (4).g表示八字节

  比如:x/3xh buf

  表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

  thread thread_no //切换到线程号

  thread apply all command //所有线程都执行命令打印栈桢

  比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

  show scheduler-locking

学习啦在线学习网   set scheduler-locking on

  set scheduler-locking off

  默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

  但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

学习啦在线学习网   这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

  (2)non-stop模式(7.0以后的版本支持)

学习啦在线学习网   set target-async 1

  set pagination off

  set non-stop on

  gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

学习啦在线学习网   (1).singal 发送信号

学习啦在线学习网   假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

  要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

  (gdb) signal 2

学习啦在线学习网   (2).handle 拦截信号

  Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

  * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

学习啦在线学习网   * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

  * print 接受到信号时显示一条消息

  * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

学习啦在线学习网   * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

学习啦在线学习网   * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

  handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

  handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

学习啦在线学习网   9.生成环境使用GDB场景

  内核转储(coredump)

学习啦在线学习网   (1).配置产生core文件

学习啦在线学习网   前置条件:确保系统配置的core file size足够,一般设置成unlimited

  ulimit -c unlimited

  配置corefile的参数:

学习啦在线学习网   echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

学习啦在线学习网   mkdir /tmp/corefiles

  chmod 777 /tmp/corefiles

  echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

  echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

  a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

  b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

学习啦在线学习网   c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

  (2).使用core文件

  gdb /usr/MySQL/bin/mysqld core.24556

  (3).dump已经运行进程的状态信息

学习啦在线学习网   gdb attach pid

  (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

学习啦在线学习网   另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

  (4).打印线程信息

学习啦在线学习网   pstack pid

学习啦在线学习网   pt-pmp -p pid

  pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

  (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

  比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

  addr2line -e /usr/mysql/bin/mysqld 0x64bd60

  /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

  http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

  GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

  GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

学习啦在线学习网   使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

  在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

学习啦在线学习网   Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

学习啦在线学习网   Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

  使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


学习啦在线学习网 看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

学习啦在线学习网 = {val = 1.5, val2 = 10}

学习啦在线学习网   print xxx //打印变量

  p /x xxx //16进制显示

学习啦在线学习网   p str@str_len //打印字符串

学习啦在线学习网   info locals //打印出当前函数中所有局部变量及其值。

学习啦在线学习网   info args //打印出当前函数的参数名及其值。

  display 变量 //自动打印变量

  undisplay //取消自动打印

  注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

学习啦在线学习网   格式: x /nfu <addr> x 是 examine 的缩写

学习啦在线学习网   a.n表示要显示的内存单元的个数

学习啦在线学习网   b.f表示显示方式, 可取如下值

  (1).x 按十六进制格式显示变量。

  (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

学习啦在线学习网   (4).o 按八进制格式显示变量。

  (5).t 按二进制格式显示变量。

  (6).a 按十六进制格式显示变量。

  (7).i 指令地址格式

  (8).c 按字符格式显示变量。

  (9).f 按浮点数格式显示变量。

学习啦在线学习网   c.u表示一个地址单元的长度

  (1).b表示单字节,

学习啦在线学习网   (2).h表示双字节,

  (3).w表示四字节,

  (4).g表示八字节

  比如:x/3xh buf

学习啦在线学习网   表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

学习啦在线学习网   info threads //查看线程

学习啦在线学习网   thread thread_no //切换到线程号

学习啦在线学习网   thread apply all command //所有线程都执行命令打印栈桢

  比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

  show scheduler-locking

学习啦在线学习网   set scheduler-locking on

  set scheduler-locking off

  默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

  但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

  这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

学习啦在线学习网   (2)non-stop模式(7.0以后的版本支持)

  set target-async 1

学习啦在线学习网   set pagination off

学习啦在线学习网   set non-stop on

学习啦在线学习网   gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

  (1).singal 发送信号

  假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

  要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

学习啦在线学习网   (gdb) signal 2

  (2).handle 拦截信号

  Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

学习啦在线学习网   * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

  * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

  * print 接受到信号时显示一条消息

  * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

  * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

学习啦在线学习网   * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

  handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

  handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

  9.生成环境使用GDB场景

  内核转储(coredump)

学习啦在线学习网   (1).配置产生core文件

  前置条件:确保系统配置的core file size足够,一般设置成unlimited

  ulimit -c unlimited

学习啦在线学习网   配置corefile的参数:

学习啦在线学习网   echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

  mkdir /tmp/corefiles

  chmod 777 /tmp/corefiles

学习啦在线学习网   echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

学习啦在线学习网   echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

  a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

学习啦在线学习网   b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

  (2).使用core文件

  gdb /usr/MySQL/bin/mysqld core.24556

  (3).dump已经运行进程的状态信息

学习啦在线学习网   gdb attach pid

  (gdb) generate-core-file

学习啦在线学习网   调试完毕后,通过detach命令退出。

学习啦在线学习网   另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

学习啦在线学习网   (4).打印线程信息

学习啦在线学习网   pstack pid

学习啦在线学习网   pt-pmp -p pid

  pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

学习啦在线学习网   (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

  比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

  addr2line -e /usr/mysql/bin/mysqld 0x64bd60

  /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

学习啦在线学习网   http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

  GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

  GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

  使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

  在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

  Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

  Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

学习啦在线学习网   使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

= {val = 1.5, val2 = 10}

学习啦在线学习网   print xxx //打印变量

  p /x xxx //16进制显示

  p str@str_len //打印字符串

  info locals //打印出当前函数中所有局部变量及其值。

学习啦在线学习网   info args //打印出当前函数的参数名及其值。

  display 变量 //自动打印变量

学习啦在线学习网   undisplay //取消自动打印

  注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

  格式: x /nfu <addr> x 是 examine 的缩写

  a.n表示要显示的内存单元的个数

  b.f表示显示方式, 可取如下值

学习啦在线学习网   (1).x 按十六进制格式显示变量。

  (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

学习啦在线学习网   (4).o 按八进制格式显示变量。

  (5).t 按二进制格式显示变量。

  (6).a 按十六进制格式显示变量。

学习啦在线学习网   (7).i 指令地址格式

学习啦在线学习网   (8).c 按字符格式显示变量。

  (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

  (1).b表示单字节,

学习啦在线学习网   (2).h表示双字节,

学习啦在线学习网   (3).w表示四字节,

  (4).g表示八字节

学习啦在线学习网   比如:x/3xh buf

学习啦在线学习网   表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

  thread thread_no //切换到线程号

学习啦在线学习网   thread apply all command //所有线程都执行命令打印栈桢

  比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

  show scheduler-locking

  set scheduler-locking on

学习啦在线学习网   set scheduler-locking off

学习啦在线学习网   默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

  但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

学习啦在线学习网   这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

  (2)non-stop模式(7.0以后的版本支持)

  set target-async 1

  set pagination off

  set non-stop on

学习啦在线学习网   gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

学习啦在线学习网   (1).singal 发送信号

  假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

  要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

  (gdb) signal 2

  (2).handle 拦截信号

学习啦在线学习网   Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

  * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

  * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

学习啦在线学习网   * print 接受到信号时显示一条消息

学习啦在线学习网   * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

  * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

学习啦在线学习网   * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

学习啦在线学习网   handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

学习啦在线学习网   handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

  9.生成环境使用GDB场景

  内核转储(coredump)

  (1).配置产生core文件

  前置条件:确保系统配置的core file size足够,一般设置成unlimited

  ulimit -c unlimited

学习啦在线学习网   配置corefile的参数:

  echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

  mkdir /tmp/corefiles

  chmod 777 /tmp/corefiles

  echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

学习啦在线学习网   echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

  a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

  b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

学习啦在线学习网   c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

学习啦在线学习网   (2).使用core文件

学习啦在线学习网   gdb /usr/MySQL/bin/mysqld core.24556

  (3).dump已经运行进程的状态信息

学习啦在线学习网   gdb attach pid

  (gdb) generate-core-file

学习啦在线学习网   调试完毕后,通过detach命令退出。

学习啦在线学习网   另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

  (4).打印线程信息

  pstack pid

学习啦在线学习网   pt-pmp -p pid

学习啦在线学习网   pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

  (5).altert日志

学习啦在线学习网   这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

  比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

  addr2line -e /usr/mysql/bin/mysqld 0x64bd60

  /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

  http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

  GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

学习啦在线学习网   GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

  使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

  在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

  Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

学习啦在线学习网   Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

  使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


学习啦在线学习网 看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

= {val = 1.5, val2 = 10}

  print xxx //打印变量

  p /x xxx //16进制显示

学习啦在线学习网   p str@str_len //打印字符串

学习啦在线学习网   info locals //打印出当前函数中所有局部变量及其值。

学习啦在线学习网   info args //打印出当前函数的参数名及其值。

学习啦在线学习网   display 变量 //自动打印变量

  undisplay //取消自动打印

  注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

  格式: x /nfu <addr> x 是 examine 的缩写

学习啦在线学习网   a.n表示要显示的内存单元的个数

  b.f表示显示方式, 可取如下值

  (1).x 按十六进制格式显示变量。

  (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

学习啦在线学习网   (4).o 按八进制格式显示变量。

  (5).t 按二进制格式显示变量。

学习啦在线学习网   (6).a 按十六进制格式显示变量。

学习啦在线学习网   (7).i 指令地址格式

学习啦在线学习网   (8).c 按字符格式显示变量。

  (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

  (1).b表示单字节,

学习啦在线学习网   (2).h表示双字节,

  (3).w表示四字节,

学习啦在线学习网   (4).g表示八字节

  比如:x/3xh buf

  表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

学习啦在线学习网   thread thread_no //切换到线程号

  thread apply all command //所有线程都执行命令打印栈桢

  比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

  show scheduler-locking

  set scheduler-locking on

  set scheduler-locking off

  默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

学习啦在线学习网   但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

  这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

  (2)non-stop模式(7.0以后的版本支持)

  set target-async 1

学习啦在线学习网   set pagination off

  set non-stop on

学习啦在线学习网   gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

  (1).singal 发送信号

  假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

学习啦在线学习网   要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

  (gdb) signal 2

  (2).handle 拦截信号

  Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

学习啦在线学习网   * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

  * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

学习啦在线学习网   * print 接受到信号时显示一条消息

学习啦在线学习网   * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

  * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

  * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

  handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

  handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

  9.生成环境使用GDB场景

  内核转储(coredump)

  (1).配置产生core文件

学习啦在线学习网   前置条件:确保系统配置的core file size足够,一般设置成unlimited

学习啦在线学习网   ulimit -c unlimited

  配置corefile的参数:

学习啦在线学习网   echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

学习啦在线学习网   mkdir /tmp/corefiles

  chmod 777 /tmp/corefiles

  echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

  echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

  a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

  b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

学习啦在线学习网   (2).使用core文件

学习啦在线学习网   gdb /usr/MySQL/bin/mysqld core.24556

  (3).dump已经运行进程的状态信息

学习啦在线学习网   gdb attach pid

学习啦在线学习网   (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

  另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

学习啦在线学习网   (4).打印线程信息

  pstack pid

学习啦在线学习网   pt-pmp -p pid

学习啦在线学习网   pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

  (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

  比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

  addr2line -e /usr/mysql/bin/mysqld 0x64bd60

  /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

学习啦在线学习网   http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

  GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

  GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

  使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

  在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

  Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

  Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

  使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


学习啦在线学习网 看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

= {val = 1.5, val2 = 10}

学习啦在线学习网   print xxx //打印变量

学习啦在线学习网   p /x xxx //16进制显示

  p str@str_len //打印字符串

  info locals //打印出当前函数中所有局部变量及其值。

学习啦在线学习网   info args //打印出当前函数的参数名及其值。

  display 变量 //自动打印变量

  undisplay //取消自动打印

学习啦在线学习网   注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

学习啦在线学习网   格式: x /nfu <addr> x 是 examine 的缩写

学习啦在线学习网   a.n表示要显示的内存单元的个数

学习啦在线学习网   b.f表示显示方式, 可取如下值

学习啦在线学习网   (1).x 按十六进制格式显示变量。

学习啦在线学习网   (2).d 按十进制格式显示变量。

学习啦在线学习网   (3).u 按十进制格式显示无符号整型。

学习啦在线学习网   (4).o 按八进制格式显示变量。

学习啦在线学习网   (5).t 按二进制格式显示变量。

  (6).a 按十六进制格式显示变量。

  (7).i 指令地址格式

学习啦在线学习网   (8).c 按字符格式显示变量。

学习啦在线学习网   (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

学习啦在线学习网   (1).b表示单字节,

  (2).h表示双字节,

学习啦在线学习网   (3).w表示四字节,

学习啦在线学习网   (4).g表示八字节

学习啦在线学习网   比如:x/3xh buf

  表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

学习啦在线学习网   thread thread_no //切换到线程号

学习啦在线学习网   thread apply all command //所有线程都执行命令打印栈桢

  比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

  show scheduler-locking

  set scheduler-locking on

学习啦在线学习网   set scheduler-locking off

  默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

  但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

学习啦在线学习网   这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

  (2)non-stop模式(7.0以后的版本支持)

  set target-async 1

  set pagination off

  set non-stop on

  gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

  (1).singal 发送信号

学习啦在线学习网   假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

  要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

学习啦在线学习网   (gdb) signal 2

  (2).handle 拦截信号

学习啦在线学习网   Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

  * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

  * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

学习啦在线学习网   * print 接受到信号时显示一条消息

学习啦在线学习网   * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

学习啦在线学习网   * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

  * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

  handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

学习啦在线学习网   handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

  9.生成环境使用GDB场景

  内核转储(coredump)

  (1).配置产生core文件

  前置条件:确保系统配置的core file size足够,一般设置成unlimited

  ulimit -c unlimited

  配置corefile的参数:

学习啦在线学习网   echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

  mkdir /tmp/corefiles

学习啦在线学习网   chmod 777 /tmp/corefiles

  echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

学习啦在线学习网   echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

学习啦在线学习网   a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

学习啦在线学习网   b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

  (2).使用core文件

  gdb /usr/MySQL/bin/mysqld core.24556

学习啦在线学习网   (3).dump已经运行进程的状态信息

  gdb attach pid

学习啦在线学习网   (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

  另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

学习啦在线学习网   (4).打印线程信息

  pstack pid

  pt-pmp -p pid

学习啦在线学习网   pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

学习啦在线学习网   (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

  比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

学习啦在线学习网   addr2line -e /usr/mysql/bin/mysqld 0x64bd60

学习啦在线学习网   /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

  http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

  GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

学习啦在线学习网   GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

学习啦在线学习网   使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

学习啦在线学习网   在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

  Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

学习啦在线学习网   Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

学习啦在线学习网   使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

= {val = 1.5, val2 = 10}

  print xxx //打印变量

  p /x xxx //16进制显示

学习啦在线学习网   p str@str_len //打印字符串

  info locals //打印出当前函数中所有局部变量及其值。

学习啦在线学习网   info args //打印出当前函数的参数名及其值。

  display 变量 //自动打印变量

  undisplay //取消自动打印

学习啦在线学习网   注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

  格式: x /nfu <addr> x 是 examine 的缩写

  a.n表示要显示的内存单元的个数

  b.f表示显示方式, 可取如下值

  (1).x 按十六进制格式显示变量。

学习啦在线学习网   (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

  (4).o 按八进制格式显示变量。

  (5).t 按二进制格式显示变量。

  (6).a 按十六进制格式显示变量。

  (7).i 指令地址格式

  (8).c 按字符格式显示变量。

  (9).f 按浮点数格式显示变量。

学习啦在线学习网   c.u表示一个地址单元的长度

学习啦在线学习网   (1).b表示单字节,

  (2).h表示双字节,

学习啦在线学习网   (3).w表示四字节,

  (4).g表示八字节

  比如:x/3xh buf

  表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

  thread thread_no //切换到线程号

  thread apply all command //所有线程都执行命令打印栈桢

学习啦在线学习网   比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

  show scheduler-locking

学习啦在线学习网   set scheduler-locking on

  set scheduler-locking off

学习啦在线学习网   默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

学习啦在线学习网   但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

学习啦在线学习网   这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

  (2)non-stop模式(7.0以后的版本支持)

学习啦在线学习网   set target-async 1

学习啦在线学习网   set pagination off

  set non-stop on

  gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

学习啦在线学习网   (1).singal 发送信号

  假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

  要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

  (gdb) signal 2

学习啦在线学习网   (2).handle 拦截信号

学习啦在线学习网   Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

  * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

  * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

  * print 接受到信号时显示一条消息

  * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

  * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

学习啦在线学习网   * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

学习啦在线学习网   handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

学习啦在线学习网   handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

学习啦在线学习网   9.生成环境使用GDB场景

学习啦在线学习网   内核转储(coredump)

  (1).配置产生core文件

  前置条件:确保系统配置的core file size足够,一般设置成unlimited

  ulimit -c unlimited

学习啦在线学习网   配置corefile的参数:

  echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

学习啦在线学习网   mkdir /tmp/corefiles

  chmod 777 /tmp/corefiles

学习啦在线学习网   echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

学习啦在线学习网   echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

学习啦在线学习网   a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

学习啦在线学习网   b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

  (2).使用core文件

学习啦在线学习网   gdb /usr/MySQL/bin/mysqld core.24556

学习啦在线学习网   (3).dump已经运行进程的状态信息

学习啦在线学习网   gdb attach pid

  (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

学习啦在线学习网   另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

学习啦在线学习网   (4).打印线程信息

学习啦在线学习网   pstack pid

学习啦在线学习网   pt-pmp -p pid

学习啦在线学习网   pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

学习啦在线学习网   (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

  比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

  addr2line -e /usr/mysql/bin/mysqld 0x64bd60

  /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

学习啦在线学习网   http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

  GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

学习啦在线学习网   GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

学习啦在线学习网   使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

  在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

学习啦在线学习网   Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

学习啦在线学习网   Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

  使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


学习啦在线学习网 看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

学习啦在线学习网 = {val = 1.5, val2 = 10}

  print xxx //打印变量

  p /x xxx //16进制显示

  p str@str_len //打印字符串

  info locals //打印出当前函数中所有局部变量及其值。

学习啦在线学习网   info args //打印出当前函数的参数名及其值。

学习啦在线学习网   display 变量 //自动打印变量

  undisplay //取消自动打印

学习啦在线学习网   注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

  格式: x /nfu <addr> x 是 examine 的缩写

  a.n表示要显示的内存单元的个数

学习啦在线学习网   b.f表示显示方式, 可取如下值

学习啦在线学习网   (1).x 按十六进制格式显示变量。

  (2).d 按十进制格式显示变量。

学习啦在线学习网   (3).u 按十进制格式显示无符号整型。

学习啦在线学习网   (4).o 按八进制格式显示变量。

  (5).t 按二进制格式显示变量。

  (6).a 按十六进制格式显示变量。

  (7).i 指令地址格式

  (8).c 按字符格式显示变量。

  (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

  (1).b表示单字节,

学习啦在线学习网   (2).h表示双字节,

  (3).w表示四字节,

  (4).g表示八字节

  比如:x/3xh buf

  表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

  thread thread_no //切换到线程号

  thread apply all command //所有线程都执行命令打印栈桢

学习啦在线学习网   比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

  show scheduler-locking

  set scheduler-locking on

  set scheduler-locking off

学习啦在线学习网   默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

  但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

  这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

  (2)non-stop模式(7.0以后的版本支持)

  set target-async 1

  set pagination off

  set non-stop on

学习啦在线学习网   gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

  (1).singal 发送信号

  假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

学习啦在线学习网   要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

  (gdb) signal 2

  (2).handle 拦截信号

  Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

学习啦在线学习网   * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

  * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

  * print 接受到信号时显示一条消息

  * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

  * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

  * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

学习啦在线学习网   handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

  handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

  9.生成环境使用GDB场景

  内核转储(coredump)

  (1).配置产生core文件

学习啦在线学习网   前置条件:确保系统配置的core file size足够,一般设置成unlimited

  ulimit -c unlimited

  配置corefile的参数:

学习啦在线学习网   echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

  mkdir /tmp/corefiles

学习啦在线学习网   chmod 777 /tmp/corefiles

学习啦在线学习网   echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

  echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

学习啦在线学习网   a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

学习啦在线学习网   b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

学习啦在线学习网   (2).使用core文件

学习啦在线学习网   gdb /usr/MySQL/bin/mysqld core.24556

学习啦在线学习网   (3).dump已经运行进程的状态信息

  gdb attach pid

  (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

  另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

学习啦在线学习网   (4).打印线程信息

学习啦在线学习网   pstack pid

  pt-pmp -p pid

  pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

  (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

  比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

学习啦在线学习网   addr2line -e /usr/mysql/bin/mysqld 0x64bd60

  /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

  http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

  GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

学习啦在线学习网   GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

  使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

  在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

  Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

  Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

  使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

= {val = 1.5, val2 = 10}

学习啦在线学习网   print xxx //打印变量

  p /x xxx //16进制显示

  p str@str_len //打印字符串

  info locals //打印出当前函数中所有局部变量及其值。

学习啦在线学习网   info args //打印出当前函数的参数名及其值。

学习啦在线学习网   display 变量 //自动打印变量

学习啦在线学习网   undisplay //取消自动打印

学习啦在线学习网   注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

  格式: x /nfu <addr> x 是 examine 的缩写

  a.n表示要显示的内存单元的个数

  b.f表示显示方式, 可取如下值

  (1).x 按十六进制格式显示变量。

  (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

  (4).o 按八进制格式显示变量。

学习啦在线学习网   (5).t 按二进制格式显示变量。

  (6).a 按十六进制格式显示变量。

学习啦在线学习网   (7).i 指令地址格式

  (8).c 按字符格式显示变量。

  (9).f 按浮点数格式显示变量。

学习啦在线学习网   c.u表示一个地址单元的长度

  (1).b表示单字节,

学习啦在线学习网   (2).h表示双字节,

学习啦在线学习网   (3).w表示四字节,

学习啦在线学习网   (4).g表示八字节

学习啦在线学习网   比如:x/3xh buf

学习啦在线学习网   表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

  thread thread_no //切换到线程号

  thread apply all command //所有线程都执行命令打印栈桢

  比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

学习啦在线学习网   show scheduler-locking

  set scheduler-locking on

  set scheduler-locking off

  默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

  但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

学习啦在线学习网   这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

  (2)non-stop模式(7.0以后的版本支持)

学习啦在线学习网   set target-async 1

  set pagination off

  set non-stop on

  gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

学习啦在线学习网   (1).singal 发送信号

  假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

  要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

  (gdb) signal 2

  (2).handle 拦截信号

  Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

  * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

  * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

学习啦在线学习网   * print 接受到信号时显示一条消息

学习啦在线学习网   * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

  * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

  * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

  handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

  handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

学习啦在线学习网   9.生成环境使用GDB场景

  内核转储(coredump)

  (1).配置产生core文件

  前置条件:确保系统配置的core file size足够,一般设置成unlimited

  ulimit -c unlimited

  配置corefile的参数:

学习啦在线学习网   echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

  mkdir /tmp/corefiles

学习啦在线学习网   chmod 777 /tmp/corefiles

学习啦在线学习网   echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

  echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

  a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

  b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

  (2).使用core文件

学习啦在线学习网   gdb /usr/MySQL/bin/mysqld core.24556

学习啦在线学习网   (3).dump已经运行进程的状态信息

  gdb attach pid

  (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

学习啦在线学习网   另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

  (4).打印线程信息

学习啦在线学习网   pstack pid

  pt-pmp -p pid

  pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

  (5).altert日志

学习啦在线学习网   这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

学习啦在线学习网   比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

  addr2line -e /usr/mysql/bin/mysqld 0x64bd60

学习啦在线学习网   /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

  http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

  GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

学习啦在线学习网   GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

学习啦在线学习网   使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

学习啦在线学习网   在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

学习啦在线学习网   Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

  Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

  使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


学习啦在线学习网 看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

= {val = 1.5, val2 = 10}

  print xxx //打印变量

  p /x xxx //16进制显示

  p str@str_len //打印字符串

  info locals //打印出当前函数中所有局部变量及其值。

  info args //打印出当前函数的参数名及其值。

学习啦在线学习网   display 变量 //自动打印变量

  undisplay //取消自动打印

  注意:默认编译的时候,调试过程是看不见宏的值的,编译时候需要给选项。-g3

  6.内存查看

  格式: x /nfu <addr> x 是 examine 的缩写

  a.n表示要显示的内存单元的个数

  b.f表示显示方式, 可取如下值

  (1).x 按十六进制格式显示变量。

学习啦在线学习网   (2).d 按十进制格式显示变量。

  (3).u 按十进制格式显示无符号整型。

  (4).o 按八进制格式显示变量。

  (5).t 按二进制格式显示变量。

学习啦在线学习网   (6).a 按十六进制格式显示变量。

学习啦在线学习网   (7).i 指令地址格式

  (8).c 按字符格式显示变量。

学习啦在线学习网   (9).f 按浮点数格式显示变量。

  c.u表示一个地址单元的长度

学习啦在线学习网   (1).b表示单字节,

  (2).h表示双字节,

学习啦在线学习网   (3).w表示四字节,

  (4).g表示八字节

  比如:x/3xh buf

  表示从内存地址buf读取内容,3表示三个单位,x表示按十六进制显示,h表示以双字节为一个单位。

  7.多线程调试

  info threads //查看线程

学习啦在线学习网   thread thread_no //切换到线程号

学习啦在线学习网   thread apply all command //所有线程都执行命令打印栈桢

  比如:thread apply all bt //所有线程都打印栈桢

  (1)线程锁

  show scheduler-locking

  set scheduler-locking on

  set scheduler-locking off

  默认是off,当程序继续运行的时候如果有断点,那么就把所有的线程都停下来,直到你指定某个线程继续执行(thread thread_no apply continue).

  但是如果直接在当前线程执行continue的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。

  这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。

学习啦在线学习网   (2)non-stop模式(7.0以后的版本支持)

  set target-async 1

  set pagination off

  set non-stop on

  gdb启动了不停模式,除了断点有关的线程会被停下来,其他线程会执行。

  8.信号量

  (1).singal 发送信号

学习啦在线学习网   假定你的程序已将一个专用的 SIGINT(键盘输入,或CTRL-C;信号2)信号处理程序设置成采取某个清理动作,

学习啦在线学习网   要想测试该信号处理程序,你可以设置一个断点并使用如下命令:

学习啦在线学习网   (gdb) signal 2

学习啦在线学习网   (2).handle 拦截信号

  Handle命令可控制信号的处理,他有两个参数,一个是信号名,另一个是接受到信号时该作什么。几种可能的参数是:

  * nostop 接收到信号时,不要将它发送给程序,也不要停止程序。

学习啦在线学习网   * stop 接受到信号时停止程序的执行,从而允许程序调试;显示一条表示已接受到信号的消息(禁止使用消息除外)

  * print 接受到信号时显示一条消息

学习啦在线学习网   * noprint 接受到信号时不要显示消息(��且隐含着不停止程序运行)

  * pass 将信号发送给程序,从而允许你的程序去处理它、停止运行或采取别的动作。

学习啦在线学习网   * nopass 停止程序运行,但不要将信号发送给程序。

  比如:

  handle SIGPIPE stop print //截获SIGPIPE信号,程序停止并打印信息

  handle SIGUSR1 nostop noprint //忽略SIGUSR1信号

学习啦在线学习网   9.生成环境使用GDB场景

  内核转储(coredump)

学习啦在线学习网   (1).配置产生core文件

学习啦在线学习网   前置条件:确保系统配置的core file size足够,一般设置成unlimited

  ulimit -c unlimited

  配置corefile的参数:

  echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]

学习啦在线学习网   mkdir /tmp/corefiles

  chmod 777 /tmp/corefiles

学习啦在线学习网   echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles

  echo "1" > /proc/sys/kernel/core_uses_pid

  注意:

  a.确保配置的目录有足够的磁盘空间,否则产生core文件可能不完整。

学习啦在线学习网   b.对于mysqld而言,要保证正确产生core-file,需要加上--core-file,默认这个参数是不打开的。

  c.kill -9 pid 是不能产生core文件的,因为SIGKILL信号不能被捕获。

  (2).使用core文件

学习啦在线学习网   gdb /usr/MySQL/bin/mysqld core.24556

学习啦在线学习网   (3).dump已经运行进程的状态信息

  gdb attach pid

  (gdb) generate-core-file

  调试完毕后,通过detach命令退出。

学习啦在线学习网   另外,通过gcore pid 命令也可以dump core文件,生成在当前目录下。

  (4).打印线程信息

学习啦在线学习网   pstack pid

学习啦在线学习网   pt-pmp -p pid

  pstack和pt-pmp都可以打印线程的信息,但是pt-pmp会对同类堆栈的线程做聚合汇总,相对于pstack功能更强大,显示也更友好。

学习啦在线学习网   (5).altert日志

  这里主要针对mysqld问题排查,mysqld异常crash后,有时候在alter日志中可以看到最后crash线程的堆栈,但是一般只有函数名或一串二进制地址,无法定位到具体是crash到哪一行,通过addr2line可以解这个问题。

学习啦在线学习网   比如:alter日志中记录crash时的地址是0x64bd60,通过如下命令,可以定位到具体是哪一行

  addr2line -e /usr/mysql/bin/mysqld 0x64bd60

  /home/admin/131_20160715135613566_11155487_code/rpm_workspace/sql/sql_parse.cc:3067

  参考文档

  http://www.percona.com/blog/2011/08/26/getting-mysql-core-file-on-linux/

学习啦在线学习网   GDB调试程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

  GDB+GDBserver无源码调试Android 动态链接库的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

学习啦在线学习网   使用hello-gl2建立ndk-GDB环境(有源码和无源码调试环境) http://www.linuxidc.com/Linux/2013-06/85935.htm

  在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

  Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

学习啦在线学习网   Ubuntu下使用GDB断点Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

学习啦在线学习网   使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm


学习啦在线学习网 看了“linux gdb调试基本命令”还想看:

1.linux常用基本命令

2.必学100个常用linux命令大全

3.六个实用的Linux命令整理

4.Linux系统有什么常用命令

5.Linux基础命令大全介绍

2805336