免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3166 | 回复: 6
打印 上一主题 下一主题

[其他] gdb 不暂停远程运行的程序,查看内存数据 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-06 16:26 |只看该作者 |倒序浏览
远程gdbserver attach到某个运行时的程序。
每次在查看此时程序的内存数据或调用栈时,总是会暂停程序。

请问,可以在不暂停程序的时候,同时在gdb**下查看它的内在数据吗?

论坛徽章:
0
2 [报告]
发表于 2014-03-07 00:19 来自手机 |只看该作者
为什么会有这种需求呢?打印日志不行?

论坛徽章:
0
3 [报告]
发表于 2014-03-07 10:41 |只看该作者
回复 2# Fixend


    但那样岂非就需要更改程序了? 就是希望在线运行的程序不受影响,同时查看它的内部状态。

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
4 [报告]
发表于 2014-03-07 10:58 |只看该作者
用 pstack

如果系统没有 pstack,模拟写一个,就是执行一些gdb的命令,bt,info locals 等等之后, detach 退出

或者在代码里调用  backtrace ?




回复 1# linyunxian


   

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
5 [报告]
发表于 2014-03-07 11:33 |只看该作者
  1. #!/bin/bash
  2. pid=$1
  3. symbol=$2
  4. if [ x"$symbol" = x"" -o x"$pid" = x"" ]
  5. then
  6.     echo "Usage : $0 <pid> <symbol>"
  7.     exit 1
  8. fi
  9. if [ ! -d /proc/$pid/task ]
  10. then
  11. echo "Usage : $0 <pid>"
  12. exit 1
  13. fi
  14. if [ ! -e $symbol ]
  15. then
  16. echo "symbol file does not exist"
  17. exit 1
  18. fi
  19. for i in $(ls /proc/$pid/task)
  20. do
  21. echo "Thread $i"
  22. gdb -p $i <<EOF 2>&1 |
  23. symbol-file $symbol
  24. bt
  25. detach
  26. EOF
  27. sed -n -e 's/(gdb) //' -e '/^#/p' -e '/^  /p'
  28. done
复制代码

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
6 [报告]
发表于 2014-03-07 11:33 |只看该作者
  1. #!/bin/bash
  2. pid=$1
  3. symbol=$2
  4. if [ x"$symbol" = x"" -o x"$pid" = x"" ]
  5. then
  6.     echo "Usage : $0 <pid> <symbol>"
  7.     exit 1
  8. fi
  9. if [ ! -d /proc/$pid/task ]
  10. then
  11. echo "Usage : $0 <pid>"
  12. exit 1
  13. fi
  14. if [ ! -e $symbol ]
  15. then
  16. echo "symbol file does not exist"
  17. exit 1
  18. fi
  19. for i in $(ls /proc/$pid/task)
  20. do
  21. echo "Thread $i"
  22. gdb -p $i <<EOF 2>&1 |
  23. symbol-file $symbol
  24. bt
  25. detach
  26. EOF
  27. sed -n -e 's/(gdb) //' -e '/^#/p' -e '/^  /p'
  28. done
复制代码

论坛徽章:
0
7 [报告]
发表于 2014-03-07 16:29 |只看该作者
回复 6# asdf2110


      pstack currently works only on Linux, only on an x86 machine running 32 bit  ELF  binaries (64 bit not supported).

兄台写的脚本倒更有通用性,谢谢。
看起来gdb在调试时还是会暂停程序。可能使用command也可以模拟一些情景。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP