好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

gdb 打印每个线程的bt ps 状态等命令

i in `ps -AL |grep Worker | awk ‘ {print $2} ‘ `; do echo === $i === ; gdb --q --n --ex bt --batch -- pid $i; done 2 >& 1 |tee / var /stacks.txt CPU使用率较低但负载较高

ps -axjf 命令查看是否存在 D+ 状态进程,该状态是指不可中断的睡眠状态。处于该状态的进程无法终止,也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。

ps -axjf

 

top -c 然后按P,获取CPU使用率最高的进程

top -H  按照 线程名称显示 top -H -p pid  显示某pid的所有线程

 GDB 加载运行的进程

 # 用法 xgdb.sh a 
prog_bin =$ 1  
running_name = $(basename $prog_bin)
pid =$(/sbin/ pidof $running_name)
gdb attach $pid 

 


使用gdb调试程序时,可以使用“ i frame ”命令( i 是 info 命令缩写)显示函数堆栈帧信 

可以用“disas /m fun”(disas是disassemble命令缩写)命令将函数代码和汇编指令映射起来

如果只想查看某一行所对应的地址范围,可以:

(gdb) i line  13  
Line   13  of  "  foo.c  "  starts at address  0x4004e9  <main+ 37 > and ends at  0x40050c  <main+ 72 >.  

 

如果只想查看这一条语句对应的汇编代码,可以使用“ disassemble [Start],[End] ”命令

使用gdb调试汇编程序时,可以用“ display /i $pc ”命令显示当程序停止时,将要执行的汇编指令

在gdb中,可以使用如下命令查看变量的类型:   whatis xx   ptype xx   i variables xx

用gdb调试程序时,可以用下面的自定义命令,打印程序动态分配内存的信息:

 define mallocinfo
    set  $__f = fopen( "  /dev/tty  " ,  "  w  "  )
  call malloc_info(  0  , $__f)
  call fclose($__f)
end
以上面程序为例:

Temporary breakpoint   5 , main () at a.c: 7 
 7                 int  i =  0  ;
(gdb) mallocinfo  

设置汇编指令格式:

在Intel x86处理器上,gdb默认显示汇编指令格式是AT& T格式。例如:

(gdb) disassemble main
Dump of assembler code   for   function main:
     0x08050c0f  <+ 0 >:     push   % ebp
     0x08050c10  <+ 1 >:     mov    %esp,% ebp
     0x08050c12  <+ 3 >:     call    0x8050c00  <change_var>
    0x08050c17  <+ 8 >:     mov    $ 0x0 ,% eax
     0x08050c1c  <+ 13 >:    pop    % ebp
     0x08050c1d  <+ 14 > :    ret
End of assembler dump.
可以用“  set  disassembly- flavor”命令将格式改为intel格式:

(gdb)   set  disassembly- flavor intel
(gdb) disassemble main
Dump of assembler code   for   function main:
     0x08050c0f  <+ 0 > :     push   ebp
     0x08050c10  <+ 1 > :     mov    ebp,esp
     0x08050c12  <+ 3 >:     call    0x8050c00  <change_var>
    0x08050c17  <+ 8 >:     mov    eax, 0x0 
    0x08050c1c  <+ 13 > :    pop    ebp
     0x08050c1d  <+ 14 > :    ret
End of assembler dump.
目前“  set  disassembly-flavor”命令只能用在Intel x86处理器上,并且取值只有“intel”和“att”。
View Code

设置观察点只针对特定线程生效

  gdb可以使用“ watch expr thread threadnum ”命令设置观察点只针对特定线程生效,也就是只有编号为 threadnum 的线程改变了变量的值,程序才会停下来,其它编号线程改变变量的值不会让程序停住

PS:

  gdb可以使用“ rwatch ”命令设置读观察点,也就是当发生读取变量行为时,程序就会暂停住

  gdb可以使用“ awatch ”命令设置读写观察点,也就是当发生读取变量或改变变量值的行为时,程序就会暂停

 

 如果想在调试一个线程时,让其它线程暂停执行,可以使用“ set scheduler-locking on ”命令:

gdb 打印每个线程的bt ps 状态等命令

标签:sbin   系统   suv   特定   bsp   variable   通过   scheduler   class   

查看更多关于gdb 打印每个线程的bt ps 状态等命令的详细内容...

  阅读:35次