JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:使用 dbx 调试程序     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  dbx 入门

2.  启动 dbx

3.  定制 dbx

4.  查看和导航到代码

5.  控制程序执行

6.  设置断点和跟踪

7.  使用调用堆栈

8.  求值和显示数据

9.  使用运行时检查

10.  修复并继续

11.  调试多线程应用程序

12.  调试子进程

13.  调试 OpenMP 程序

编译器如何转换 OpenMP 代码

可用于 OpenMP 代码的 dbx 功能

单步步入并行区域

输出变量和表达式

输出区域和线程信息

将并行区域的执行序列化

使用堆栈跟踪

使用 dump 命令

使用事件

同步事件

其他事件

OpenMP 代码的执行序列

14.  处理信号

15.  使用 dbx 调试 C++

16.  使用 dbx 调试 Fortran

17.  使用 dbx 调试 Java 应用程序

18.  在机器指令级调试

19.  将 dbx 与 Korn Shell 配合使用

20.  调试共享库

A.  修改程序状态

B.  事件管理

C.  宏

D.  命令参考

索引

编译器如何转换 OpenMP 代码

要更好地介绍 OpenMP 调试,有必要了解 OpenMP 代码是如何由编辑器进行转换的。参见下列 Fortran 示例:

1    program example
2        integer i, n
3        parameter (n = 1000000)
4        real sum, a(n)
5    
6        do i = 1, n
7        a(i) = i*i
8        end do
9    
10        sum = 0
11    
12    !$OMP PARALLEL DO DEFAULT(PRIVATE), SHARED(a, sum)
13    
14        do i = 1, n
15        sum = sum + a(i)
16        end do
17    
18    !$OMP END PARALLEL DO
19    
20        print*, sum
21        end program example

第 12 至 18 行的代码是一个并行区域。f95 编译器将这部分代码转换成从 OpenMP 运行时库中调用的外联子例程。此外联子例程有一个内部生成的名称,在本例中为 _ _$d1A12.MAIN_。然后,f95 编译器用一个 OpenMP 运行时库调用替换并行区域的代码,并将外联子例程作为其中一个参数进行传递。该 OpenMP 运行时库将处理线程相关的所有问题,并分配并行执行外联子例程的从属线程。C 编译器的工作原理与此相同。

调试 OpenMP 程序时,dbx 将外联子例程与其他任何函数一样对待,唯一的不同是您不能使用其内部生成的名称在该函数中显式设置断点。