除了调试多线程程序这一普通功能外,dbx 还允许您在 OpenMP 程序中执行以下操作:
单步执行到并行区域中。因为并行区域是外联的并且从 OpenMP 运行时库中进行调用,所以单步执行实际涉及几个层的运行时库调用(这些调用由为此目的而创建的从属线程执行)。单步步入并行区域时,到达断点的第一个线程引起程序停止。此线程可能是从属线程而不是启动单步执行的主线程。
例如,请参阅编译器如何转换 OpenMP 代码中的 Fortran 代码,并假定主线程 t@1 位于第 10 行。当您单步执行到第 12 行时,将创建从属线程 t@2、t@3 和 t@4 来执行运行时库调用。线程 t@3 首先到达断点并导致程序停止执行。因此,由线程 t@1 启动的单步执行在线程 t@3 上结束。此行为不同于正常的单步执行(在正常的单步执行后,通常仍处在与此前相同的线程上)。
打印共享、专用和线程专用变量。dbx 可以打印所有共享、专用和线程专用变量。如果尝试打印并行区域之外的线程专用变量,则会打印主线程的副本。无法通过 whatis 命令判断一个变量是共享、专用还是线程专用变量。