[转] GDB attach
转:http://blog.csdn.net/wangeen/article/details/14230171
attach是GDB一种重要的debug模式,在MPI程序debug中发挥重要的作用。
具体的执行步骤如下:
1) 首先在程序开始的地方添加如下代码, 注意这是个死循环,之所以用死循环就是让他一直在等待attch
{
int i = 0;
char hostname[256];
gethostname(hostname, sizeof(hostname));
printf("PID %d on %s ready for attach\n", getpid(), hostname);
fflush(stdout);
while (0 == i)
sleep(5);
}
启动程序会得到如下语句
PID 15425 on XXX ready for attach
PID 15426 on XXX ready for attach
2) 启动GDB
$gdb
(gdb) attach 15425
(gdb) up // 这里的up非常重要,见misc
(gdb) set var i=1
这样跳出死循环,继续执行。
3) misc
关于GDB的使用
过去我们总觉得GDB很难用,很多debug信息都没有能显示出来,尤其是在多线程的情况下,我在使用gdb attach MPI
程序的时候找到了其中的原因,因为gdb总是不停的在尝试暂停程序抓取stack中的内容到frame,如果遇到sleep之类的情况,gdb就获取不到
任何信息,在这样的情况下我们需要使用up down来切换frame。
[转] GDB attach的更多相关文章
- 非root不能gdb attach的限制
Could not attach to process. If your uid matches the uid of the targetprocess, check the setting of ...
- Use gdb attach pid and debug it
- gdb命令中attach使用
[测试程序] 我们先看看我们的测试程序: /* in eg1.c */ int wib(int no1, int no2) { int result, diff; di ...
- GDB调试命令小结
1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方 ...
- gdb 调试多线程
基本i threads 等操作略过,只谈线程同步.异步控制: 先点到,gdb attach到主线程t1 时,所有线程都会停止,所谓同步异步效果,是指在apply continue到所有线程之后, 再切 ...
- 调试多线程 & 查死锁的bug & gcore命令 & gdb对多线程的调试 & gcore & pstack & 调试常用命令
gdb thread apply all bt 如果你发现有那么几个栈停在 pthread_wait 或者类似调用上,大致就可以得出结论:就是它们几个儿女情长,耽误了整个进程. 注意gdb的版本要高于 ...
- GDB配置与.gdbinit的编写
GDB配置与.gdbinit的编写 当 GDB(即 GNU Project Debugger)启动时,它在当前用户的主目录中寻找一个名为 .gdbinit 的文件:如果该文件存在,则 GDB 就执行该 ...
- Android gdb 调试
[1].终端目录设置到: proj.android[2].make文件的编译选项加上: -g -gstabs+[3].执行编译脚本: sh ./build_native.sh NDK_DEBUG=1[ ...
- GDB调试器使用总结
概述:GDB是linux下调试程序的神器,做为linux程序员,如果不能熟练的使用GDB进行程序调试,那将是很失败的事情.强大的功能使GDB的使用也变得比较复杂,如果是初学者肯定会比繁杂的命令吓到.下 ...
随机推荐
- Cocos2dx 3.2 节点之间相互通信与设置触摸吞噬的方法
实际开发中,我们经常会遇到这样的情况.我们有一个层layer1,这个层包含一个menu层,menu1层里又包含了一个节点按钮button1.现在需要实现一个效果:点击button1弹出一个对话框,这个 ...
- C++ 性能剖析 (四):Inheritance 对性能的影响
(这个editor今天有毛病,把我的format全搞乱了,抱歉!) Inheritance 是OOP 的一个重要特征.虽然业界有许多同行不喜欢inheritance,但是正确地使用inheritanc ...
- centos账户管理命令(root权限)
cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1 查看所有用户 userdel -r 用户名 -删除用户 ...
- ThinkInJava4读书笔记之第七章隐藏实施过程
第7章 多形性 上溯造型:将一个对象作为它自己的类型使用,或者作为它的基础类型的一个对象使用.取得一个对象句柄,并将其作为基础类型句柄使用. 方法调用的绑定:将一个方法调用同一个方法主体连接到一起就称 ...
- thinkphp ajax 实例 实现
thinkPHP后台实现 #删除用户操作 function delete() { if(isset($_SERVER["HTTP_X_REQUESTED_W ...
- python运维开发之第四天
一.装饰器 1.器:代表函数,装饰器本质是函数,(装饰器他函数) 2.功能:为其他函数添加附加功能 3.原则: (1)不能修改被装饰函数的源代码 (2)不能修改被装饰函数的调用方式 4.实现装饰器知识 ...
- bind函数
bind函数把一个本地协议地址赋予一个套接字 对于网际协议,协议地址是32位的IPv4地址或128位的IPv6与16位的TCP或UDP端口号的组合 int bind ( int sockfd, con ...
- 日期选择器(Query+bootstrap和js两种方式)
日期选择是在下拉列表中选择年.月.日,年显示前后的五年,12个月,日就是有30.31.29.28天的区别,随着月份的变而变 一.js方式的日期选择 (1)首先就是三个下拉列表了,点击年.月.日显示列表 ...
- Java中抽象类和接口的用法和区别
一.抽象类 1.抽象类 包含一个抽象方法的类就是抽象类 2.抽象方法 声明而未被实现的方法,抽象方法必须使用abstract关键词字声明 public abstract class People { ...
- java线程同步问题
Java面试当中,线程可以说是必考内容,在看面试题的时候发现一遍很全的讲解Java面试题的博客:http://blog.csdn.net/csh624366188/article/details/80 ...