gdb 调试openmp多线程程序 示例介绍

 首先一个简单程序源代码:

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <omp.h>
  4 int main(int argc, char * argv[]){
  5   int i, k,m,n;
  6   printf("i=%d,threads_num=%d\n",i, omp_get_num_threads());
  7   printf("i=%d,thread_id=%d\n",i, omp_get_thread_num());
  8 #pragma omp parallel for
  9 for(i=0;i<4;i++)
 10 {
 11    k=10;
 12    m=10;
 13    n=k+m;
 14    printf("i=%d,n=%d,thread_id=%d\n",i,n, omp_get_thread_num());
 15    if(k>1)
 16    printf("OK\n");
 17 }
 18    return 1;
 19 }

编译成 test_omp

step 1:gdb test_omp

step 2:break 15

step 3:run

(gdb) r
Starting program: /home/xqc/gmptest/test_omp
[Thread debugging using libthread_db enabled]
i=0,threads_num=1
i=0,thread_id=0
[New Thread 0x7ffff740f700 (LWP 17108)]
[New Thread 0x7ffff6c0e700 (LWP 17109)]
[New Thread 0x7ffff640d700 (LWP 17110)]

Breakpoint 1, main.omp_fn.0 (.omp_data_i=0x7fffffffe3b0) at test_omp.c:15
15         k=10;
(gdb)
(gdb) info threads
  4 Thread 0x7ffff640d700 (LWP 17110)  main.omp_fn.0 (.omp_data_i=0x7fffffffe3b0) at test_omp.c:15
  3 Thread 0x7ffff6c0e700 (LWP 17109)  main.omp_fn.0 (.omp_data_i=0x7fffffffe3b0) at test_omp.c:15
  2 Thread 0x7ffff740f700 (LWP 17108)  main.omp_fn.0 (.omp_data_i=0x7fffffffe3b0) at test_omp.c:15
* 1 Thread 0x7ffff7fdf780 (LWP 17105)  main.omp_fn.0 (.omp_data_i=0x7fffffffe3b0) at test_omp.c:15
(gdb) 

step4: thread 2

(gdb) thread 2
[Switching to thread 2 (Thread 0x7ffff740f700 (LWP 17108))]#0  main.omp_fn.0 (.omp_data_i=0x7fffffffe3b0)
    at test_omp.c:15
15         k=10;
(gdb) 

至此,就可以对thread 2号线程进行debug了。

gdb 调试openmp多线程程序 示例介绍,布布扣,bubuko.com

时间: 2024-12-10 17:17:56

gdb 调试openmp多线程程序 示例介绍的相关文章

gdb调试多进程多线程程序

一.调试的指令 1.list命令 list linenum 显示程序第linenum行的周围的程序 list function 显示程序名为function的函数的源程序 list 显示当前行后面的源程序 list - 显示当前行前面的源程序 2.run(r):运行命令 run args run命令可以直接接命令行参数值,也可以在执行run之前通过 set args + 参数值实现 3.break(b):打断点 b linenum   在某行打断点 b +offset/-offset  在当前行

Eclipse+CDT+GDB调试android NDK程序(转)

Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for java jdk 6 android sdk 2.2 andrid ndk r7 当然,在windows环境下通过cygwin等工具也是可以实现gdb调试的,我也确实实现过.但是性能实在太低,卡的根本没法用.Linux下直接用gdb调试本地方法是很流畅的. 再确定安装并配置好开发环境之后,就可以开始了.

GDB调试core dump文件示例

上篇论述了三层的基本概念,作用,关系,现在展示下系统中用户登陆过程中简单应用三层结构设计思想. vb.NET的操作如下 首先建立以下windows应用程序以及类库 首先建立实体类 Public Class userInfo Private _username As String Public Property UserName As String Get Return _username End Get Set(ByVal value As String) _username = value E

gdb调试带参数程序

一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要 把调试信息加到可执行文件中.使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点.如: > cc -g hello.c -o hello > g++ -g hello.cpp -o hello 如果没有-g,你将看不见程序的函数名.变量名,所代替的全是 运行时的内存地址.当你用 -g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他. 启动 GDB的方法有以下几种

gdb调试带参数程序(转:笑笑小白,cnblog http://www.cnblogs.com/rosesmall/archive/2012/04/10/2440514.html)

一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要 把调试信息加到可执行文件中.使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点.如: > cc -g hello.c -o hello > g++ -g hello.cpp -o hello 如果没有-g,你将看不见程序的函数名.变量名,所代替的全是 运行时的内存地址.当你用 -g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他. 启动 GDB的方法有以下几种

gdb调试汇总

1. 启动GDB开始调试: (1)gdb program ///最常用的用gdb启动程序,开始调试的方式(2)gdb program core ///用gdb查看core dump文件,跟踪程序core的原因(3)gdb program pid ///用gdb调试已经开始运行的程序,指定pid即可 2. 应用程序带命令行参数的情况,可以通过下面两种方法启动: (1)启动GDB的时候,加上–args选项,然后把应用程序和其命令行参数带在后面,具体格式为:gdb –args program args

vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb

vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb << 返回vim使用进阶: 目录 本节所用命令的帮助入口: :help vimgdb 在UNIX系统最初设计时,有一个非常重要的思想:每个程序只实现单一的功能,通过管道等方式把多个程序连接起来,使之协同工作,以完成更强大的功能.程序只实现单一功能,一方面降低了程序的复杂性,另一方面,也让它专注于这一功能,把这个功能做到最好.就好像搭积木一样,每个积木只提供简单的功能,但不同的积木垒在一起,就能搭出大厦.汽车等等复杂的东西.

GDB调试,转载一位大牛的东西

http://www.wuzesheng.com/?p=1327 手把手教你玩转GDB(一)——牛刀小试:启动GDB开始调试 写在最前面:GDB是unix相关操作系统中C/C++程序开发必不可少的工具,它的功能之强大,是其它调试器所不能匹敌的.但是,现实的工作中,有很多开发者因为GDB本身入门门槛比较高,而被拒之门,与如此强大的失之交臂.笔者在近两年的C/C++开发工作中,对GDB本身的有一点研究,在这里总结出一系列<手把手教你玩转GDB>的文章,一方面权当是对自己经验的一个总结,一方面也是真

GDB调试教程

简介 GDB(GNU debugger)是GNU开源组织发布的一个强大的UNIX下的程序调试工具.可以使用它通过命令行的方式调试程序.它使你能在程序运行时观察程序的内部结构和内存的使用情况.你也可以使用它分析程序崩溃前的发生了什么,从而找出程序崩溃的原因.相对于windows下的图形界面的VC等调试工具,它提供了更强大的功能.如果想在Windows下使用gdb,需要安装MinGW或者CygWin,并且需要配置环境变量才可以使用. 一般来说,gdb完成以下四个方面的工作: 1.启动你的程序,修改一