在命令行上调试英特尔®至强融核™协处理器目标应用

简介

确定一个高性能计算目标平台的软件编码问题通常需要远程访问系统或通过防火墙访问系统。在这些情况下,最好最大限度降低功能丰富的 Elicpse* IDE 集成用户界面或其基于 Eclipse* Rich Client Platform 的独立用户界面的带宽支出。

针对这些用例提供的解决方案由两个命令行调试器组成。

英特尔® 调试器面向在英特尔® 64 上运行的应用,用于调试在基于英特尔 64 架构的主机系统上运行的所有代码。

面向在英特尔® 至强融核协处理器上运行的应用的英特尔调试器与英特尔®至强融核协处理器目标相连,允许连接到在其上运行的处理器。这些可以是本机进程或主机应用所生成的卸载进程。

方法是这样的:在有一个或两个远程终端会话的情况下,如果拥有一个全图形化用户界面不可能或不现实,可以使用英特尔® 至强融核协处理器对应用进行调试。调试器命令接口和语法会严格遵循 GDB* 中的常见规则,从而最大限度减少了解新调试概念的需求。

此外,支持在英特尔® 至强融核协处理器上进行本地调试以及 gdbserver 辅助交叉调试的 GDB* 调试器安装程序可从下列地址下载:http://software.intel.com/en-us/forums/topic/278102

调试器的安装

面向英特尔® 至强融核协处理器的英特尔® 调试器是面向 Linux* 的英特尔® Composer XE 2013 的一部分。因此,在运行面向英特尔® Parallel Studio XE 2013 软件包的安装脚本时,该调试器会自动安装。

安装程序将引导您完成安装过程。安装程序可能需要您接受许可协议并选择安装位置和安装组件。

如果您也想要使用基于 Eclipse* 的图形用户界面,请确保:

·         安装 Java* runtime environment (JRE) 1.5 1.6(也称为 6.0),以便在独立的调试解决方案中使用 Eclipse* 框架

·         安装 Eclipse* IDE 7.0 “Helios”8.0 “Indigo” 8.1 “Juno”,以便使用英特尔® 调试器与 Eclipse* CDT 的集成以及面向 C/C++ 开发人员的 Eclipse* IDE

英特尔® Composer XE 和英特尔® 调试器安装完成后,您可以通过 $ source /opt/intel/composerxe/bin/compilervars.sh intel64 来设置环境

 

不建议只使用 idbvars.sh (/opt/intel/composerxe/bin/idbvars.sh ) 环境设置脚本,因为在您的代码库中,很可能存在编译器环境与库路径的依赖关系。正确地处理这些库路径依赖关系可以使调试工作更加方便。

调试器可执行文件

安装完成后,您将可以在 /opt/intel/composerxe/bin/intel64_mic 中找到调试器的可执行文件

idbc 是主机的命令行调试器驱动程序。

idbc_mic 是英特尔® 至强融核协处理器的命令行调试器驱动程序。

对于命令行调试而言,该目录中的其它任何二进制文件都可以忽略。

在主机上调试

英特尔® Composer XE 2013 中的英特尔® 调试器有两个版本。用于主机端调试的命令行版本可使用 idbc 命令来启动。

执行命令行调试时,主机调试器和英特尔® 至强融核协处理器目标调试器不是连接在一起的。这需要用户手动启动面向英特尔® 至强融核协处理器的英特尔调试器,并在其创建后连接到卸载进程。

若要启动主机端调试器,只需利用 $ idbc 进行调用,

 

然后使用以下命令:

(idb) file <debuggee binary>

其中 <debuggee binary> 是要调试的可执行程序(利用支持符号信息的 (-g) 创建)。

或者您也可以连接到运行进程

(idb) attach <pid>

或在启动调试器时直接启动可执行程序

$ idbc <debuggee binary>

若要列出特定文件使用来源

(idb) list <filename>

若要在特定位置停止,您可以使用

(idb) break <line>



(idb) break <func>

命令行语法将遵循与 GDB* 相同的模式且与 GDB* 高度兼容。您可以按照 GNU* 调试解决方案的方式单步执行代码并列出可变内容。

如欲了解更多详细信息,可通过 /opt/intel/composerxe/Documentation/en_US/debugger/cl/index.htm 获取详细的命令行参考文档。

此外,整个文档的指针和调试器用户界面集成用户手册可在 /opt/intel/composerxe/Documentation/en_US/debugger/debugger_documentation.htm 上找到

调试主机和协处理器之间的同步

在命令行调试模式下,当协处理器上启动卸载进程时,开发主机调试器 idbc 不会收到通知。因此,与 Eclipse* IDE 集成 GUI 调试解决方案不同,远程调试连接不会自动建立。英特尔® 至强融核协处理器调试器 idbc_mic 必须要明确启动。这就是为何必须要在您希望存在有价值的目标负载的地方设置主机端断点;通过 idbc_mic 完成连接后,在您要开始调试的地方设置一个断点。

如果您正在调试异构应用并且打算同时调试主机和协处理器代码,那么必须运行面向主机的 idbc 和面向协处理器目标代码库的 idbc_mic

这意味着两个终端窗口或(用于远程调试设置)两个 ssh 会话是必不可少的。

在协处理器上手动启动应用

如果运行于英特尔® 至强融核协处理器之上的应用尚未通过卸载进程启动,而且您只希望在协处理器上手动启动应用并连接到其中,那么该进程必须包含一个无限工作循环。唯一的例外情况是关注的协处理器代码在用户触发的事件时执行,否则调试器在目标中的停止位置将通常具有不确定性。

推荐的无限工作循环

建议您实施以下内容,以确保本机或英特尔® 至强融核协处理器应用中的无限工作循环即便在启用积极编译器优化的情况下也可执行(以 C/C++ 为例):

void attach_idb() {
    volatile int loop = 1;
    do {
        volatile int a = 1;
    } while (loop);
}

在适合连接调试器的位置调用此函数。

这是很有必要的,因为当面向英特尔® 至强融核协处理器的英特尔调试器连接到进程时,调试器在目标中的停止位置是随机的。通常这是调度程序中等待主机任务的地方。

对于卸载代码,您还可以进行一次空卸载,然后在 CPU 上进行读取(以 Fortran 为例):

!dir$ offload begin target(mic)
!dir$ end offload
   
!
读入一个临时 var。用一些时间连接到英特尔® 至强融核 协处理器,然后输入一些值。
!
这种方法可能有时并不合适,但易于应用
read *, temp

您可以使用 ftpsftp 等实用程序或网络文件系统将应用上传到协处理器中。协处理器的默认 IP 地址为 172.31.x.1,其中 x 表示协处理器编号(如果系统上安装了多个协处理器)。

注:

在命令行上调试本地协处理器应用时,需要将 libmyodbl-service.so 共享库复制到协处理器中。

为此,您需要创建一个 overlay,以便文件在启动时上传。按照有关如何使用 MPSS readme.txt overlay 的说明进行操作(http://registrationcenter.intel.com/irc_nas/2618/readme.txt).

实施这一特定 overlay 所需的步骤如下:

a. 在包含以下内容的协处理器目标上创建 /etc/sysconfig/mic/conf.d/myo.conf

# MYO 下载文件

Overlay / /opt/intel/mic/myo/config/myo.filelist

在包含以下内容的调试主机上创建 /opt/intel/mic/myo/config/myo.filelist

dir /lib64 755 0 0

file /lib64/libmyodbl-service.so

/opt/intel/mic/myo/lib/libmyodbl-service.so 755 0 0

将调试器连接至协处理器

在英特尔® 至强融核协处理器上启动一个进程的标准方法是通过一个卸载进程(进程通过卸载杂注或其它语言扩展来启动)。由于主机调试器和面向英特尔® 至强融核协处理器的英特尔调试器命令行版本不相连,因此面向该协处理器的调试器既不会在卸载时直接启动,也不会在特定点停止。

因此,我们建议您在协处理器代码中添加一个无限工作循环,即使其作为一个卸载进程启动。

1:主机-目标调试连接

本机协处理器应用

如果应用被编写为在英特尔® 至强融核协处理器上本机运行,您可以使用面向英特尔® 至强融核协处理器的调试器启动该应用。该应用将通过 idbc_mic 命令在开发主机上启动。这将自动下载 idbserver 远程调试代理到协处理器上,并建立基于 TCP/IP 的远程调试运行控制。

1. 将该应用的调试版本上传到协处理器中。

2. 通过使用开发主机上的以下命令来启动调试器:

$ idbc_mic -tco -rconnect=tcpip:mic[n]:port

例如为使用默认端口的第一台 MIC 设备输入 idbc_mic -tco -rconnect=tcpip:mic0:2000

默认值:

<port> = 2000

您也可以以 172.31.x.x 的格式使用 IP 地址,而不是指定特定英特尔® 至强融核协处理器的 mic[n]

异构应用

如果该应用是一个异构应用(一款在英特尔® 64 和英特尔® 至强融核协处理器上拥有进程的应用),在协处理器上启动该进程,然后将目标调试器连接到该进程。

您应该在您希望存在有价值的目标负载的地方设置主机端断点。通过 idbc_mic 完成连接后,您可以在您想要开始调试的地方设置一个断点,或运行到上面提到的无限工作循环。

通过使用来自开发主机的以下命令来启动调试器:

$ idbc_mic -tco -rconnect=tcpip:mic[n]:port

例如为使用默认端口的第一台 MIC 设备输入 idbc_mic -tco -rconnect=tcpip:mic0:2000

默认值:

<port> = 2000

您也可以以 172.31.x.x 的格式使用 IP 地址,而不是指定特定英特尔® 至强融核协处理器的 mic[n]

如果您正在调试一款异构应用,运行该应用并将调试器连接到该应用:

输入以下命令:

(idb) attach <pid> [<image_file>]

参数:

<pid>         要连接的进程的 pid
<image_file>    镜像文件的名称。

注:

如果尚未指定镜像文件的名称,将采用当前进程的镜像文件。

注:

对于卸载应用,需要将 /opt/intel/composerxe/lib/mic/offload_main 指定为镜像文件。

若要确定要连接的进程,可使用以下命令:

(idb)idb show process-list ["proc-name"]

在协处理器上调试的基础知识

将面向英特尔® 至强融核协处理器的英特尔调试器连接到协处理器后,下一步就是启动或连接到被调试进程,并确保相关的符号信息和源文件可用。

使用 LD_LIBRARY_PATH

如果目标端应用动态链接到不属于编译器或驱动程序一部分的共享对象,并且需要设置 LD_LIBRARY_PATH 以便查找,

那么请在库被加载前设置一个断点。

当调试器在该位置停止时,使用以下命令:

(idb) set environment LD_LIBRARY_PATH path

对于该应用可能需要的其它环境变量执行相同的操作。

指定其它符号信息搜索路径

若要让调试器知道在哪里搜索面向您的应用的特定调试信息:

(idb) set solib-search-path path[:path]

例如

(idb) set solib-search-path /usr/linux-k1om-4.7/linux-k1om/lib64/lib:/usr/linux-k1om-4.7/x86_64-k1om-linux/lib64

若要确保调试器拾取到正确的目标 Linux* 运行时库

您可以使用相应的 show 命令语法,以获取搜索路径中所有目录的列表:

(idb) show solib-search-path

通过调试器控制该应用:

如果您正在调试一款异构应用,运行该应用并将调试器连接到该应用:

输入以下命令:

(idb) attach <pid> [<image_file>]

参数:

<pid>         要连接的进程的 pid
<image_file>    镜像文件的名称和路径。

注:

如果尚未指定镜像文件的名称,将采用当前进程的镜像文件。镜像文件预计在主机和目标中。该命令需要知道主机上的路径,以读取符号信息。符号信息始终在开发主机上读取。

注:

对于卸载应用,需要将

/opt/intel/composerxe/lib/mic/offload_main

指定为镜像文件。

若要确定要连接的进程,可使用以下命令:

(idb)idb show process-list ["proc-name"]

语义:

idb show process-list 会打印出在目标上运行的所有进程,$lsproc 变量会将所发现的进程数保留为一个负数,也就是说,如果有 5 个进程在运行,那么 $lsproc 将为 -5

idb show process-list "proc-name" 将获取进程列表并搜索一个名为 proc-name 的进程。如果找到了该进程,$lsproc 将包含该进程 id,如果没有找到适用的进程,$lsproc 将包含 0

注:

在命令行上调试本地协处理器应用时,需要手动上传 libmyodbl-service.so 共享库。

为此,您需要创建一个 overlay,以便文件在启动时上传。按照有关如何使用 MPSS readme.txt overlay 的说明进行操作。实施这一特定 overlay 所需的步骤如下:

1.     1. 在包含以下内容的协处理器目标上创建 /etc/sysconfig/mic/conf.d/myo.conf

# MYO 下载文件

Overlay / /opt/intel/mic/myo/config/myo.filelist

2.     2. 在包含以下内容的调试主机上创建 /opt/intel/mic/myo/config/myo.filelist

dir /lib64 755 0 0

file /lib64/libmyodbl-service.so

opt/intel/mic/myo/lib/libmyodbl-service.so 755 0 0

在调试器内启动应用

若要调试一款在英特尔® 至强融核协处理器上本机运行的应用,除了能够连接到运行应用以外,您还可以使用调试器启动该应用:

1. 指定远程可执行文件:
(idb) idb file-remote target-bin-path

2. 在主机上指定包含调试信息的文件:
(idb) idb file-remote target-bin-path

3. 设置断点并应用其它所有应用特定的环境设置后,启动该应用:

(idb)run

调试器将启动该应用,或连接到该应用的进程并中止该进程。

无限工作循环

建议您实施以下内容,以确保本机或英特尔® 至强融核协处理器应用中的无限工作循环即便在启用积极编译器优化的情况下也可执行(以 C/C++ 为例):

void attach_idb() {
    volatile int loop = 1;
    do {
        volatile int a = 1;
    } while (loop);
}

在适合连接调试器的位置调用此函数。

这是很有必要的,因为当面向英特尔® 至强融核协处理器的英特尔调试器连接到进程时,调试器在目标中的停止位置是随机的。通常这是调度程序中等待主机任务的地方。

对于卸载代码,您还可以进行一次空卸载,然后在 CPU 上进行读取(以 Fortran 为例):

!dir$ offload begin target(mic)
!dir$ end offload
   
!
读入一个临时 var。花时间连接到英特尔® 至强融核 协处理器,然后输入一些值。
!
这种方法可能有时并不合适,但易于应用
read *, temp

从无限工作循环开始调试

如果您向卸载或本机代码中添加了一个无限工作循环,以确保您可以在一个定义明确的位置自动开始调试基于英特尔® 至强融核协处理器的代码,那么您可以使用以下方法来开始该循环外的调试工作。

1.    使用以下命令:

(idb) list <filename>

您可以确定 volatile int a=1 的源代码行数。

2.     将循环计数器变量设为 0,并在该行设置一个断点

(idb) p loop=0

(idb) break <line number>

3.     继续
(idb) continue

注:

在命令行上调试本地协处理器应用时,需要手动上传 libmyodbl-service.so 共享库。

为此,您需要创建一个 overlay,以便文件在启动时上传。按照有关如何使用 MPSS readme.txt overlay 的说明进行操作。实施这一特定 overlay 所需的步骤如下:

a.在包含以下内容的协处理器目标上创建 /etc/sysconfig/mic/conf.d/myo.conf

# MYO
下载文件

Overlay / /opt/intel/mic/myo/config/myo.filelist

b.在包含以下内容的调试主机上创建 /opt/intel/mic/myo/config/myo.filelist

dir /lib64 755 0 0

file /lib64/libmyodbl-service.so

opt/intel/mic/myo/lib/libmyodbl-service.so 755 0 0

共享对象调试

使用 LD_LIBRARY_PATH

如果目标端应用动态链接到不属于编译器或驱动程序一部分的共享对象,并且需要设置 LD_LIBRARY_PATH 以便查找,那么请在库被加载前设置一个断点。当调试器在该位置停止时,您可以使用

(idb) set environment LD_LIBRARY_PATH

命令来设置该变量。对于该应用可能需要的其它环境变量执行相同的操作。

指定其它符号信息搜索路径

如果您的应用不是构建在相同的系统上,或者如果包含调试信息的共享对象已从原始位置移除,那么您可能需要让调试器知道在哪里搜索面向该应用的特定调试信息。使用以下命令:

(idb) set solib-search-path path[:path].

已知问题

未正确解析英特尔® 至强融核协处理器上的主目录位置

面向英特尔® 至强融核协处理器的英特尔® 调试器假定特定用户的目录结构和主目录位置在英特尔® 64 主机系统和英特尔® 至强融核协处理器上是相同的。

如果您的开发设置不是这样,那么可能必须要编辑 idbc_mic 调试器驱动程序。

1.     利用您所选择的编辑器打开 idbc_mic

2.    
scp $INSTALLDIR/debugger/mic/lib/idbserver_mic
$rconnect_ip:$HOME /idbserver_mic
ssh $rconnect_ip "$HOME/idbserver_mic -c
tcpip:$rconnect_port -x"&

替换为
REMOTE_HOME=`ssh mic0 pwd`
scp $INSTALLDIR/debugger/mic/lib/idbserver_mic $rconnect_ip:$REMOTE_HOME/idbserver_mic
     ssh $rconnect_ip "$REMOTE_HOME/idbserver_mic -c
tcpip:$rconnect_port -x"&

通过 GDB* 进行命令行调试

支持英特尔® 至强融核协处理器的 GNU* Project Debugger GDB* 目前可通过以下位置获取:

http://software.intel.com/en-us/forums/topic/278102
请通过以下地址下载 GDB*

http://registrationcenter.intel.com/irc_nas/2618/gdb-intel-mic-2.1.3126.tgz

GDB*
自述文件可在以下地址中找到:

http://registrationcenter.intel.com/irc_nas/2618/gdb-intel-mic-2.1.3126-readme.txt

调试器的安装

1.     下载 gdb-intel-mic-2.1.xxxx.tgz

2.     解包
$ tar xzf gdb-intel-mic-2.1.xxxx.tgz

3.     gdb/gdbserver 复制到英特尔® 至强融核协处理器

$ scp gdb gdbserver root@mic0:/usr/bin
            
或利用用户账户
$ scp gdb gdbserver mic0:

通过 GDB* 在英特尔® 至强融核协处理器上进行本机调试

1.     在英特尔® 至强融核协处理器上运行 GDB*

$ ssh –t mic0 /usr/bin/gdb
              
或利用用户账户
$ ssh –t mic0 ./gdb

2.    通过 process-id 连接到运行应用

(gdb) shell pidof <my_application> <pid>
其中 <pid> process-id<my_application> 是您打算调试的应用名称。
(gdb) attach <pid>

3.     直接从 GDB* 运行应用

(gdb) file /target/path/to/applicaton
(gdb) start

通过 GDB* 进行远程调试

1.     在本地主机上运行 GDB*

$ /usr/linux-k1om-4.7/bin/x86_64-k1om-linux-gdb

2.     在英特尔® 至强融核协处理器上启动 gdbserver
  
(gdb) target extended-remote | ssh –T mic0 gdbserver –-multi –
       Remote debugging using |ssh -T mic0 gdbserver --multi -
       Remote debugging using stdio

3.     通过 process-id (pid) 连接到运行应用

(gdb) file /local/path/to/applicaton
(gdb) attach <remote-pid>

4.     直接从 GDB* 运行应用

(gdb) file /local/path/to/applicaton
(gdb) set remote exec-file /target/path/to/application

结论

英特尔® Composer XE 2013 套件中的英特尔调试器不仅提供了一款基于 GUI 的完整的调试解决方案,还包含两个可结合使用的命令行调试器,用于分析和调试卸载代码。

此外,您可以单独使用面向英特尔® 至强融核协处理器的英特尔调试器来调试在基于英特尔® 至强融核协处理器的协处理器上本机运行的代码。

由于这两个命令行调试解决方案是相互独立的,无法相互同步断点或被调试应用的状态,因此有几个步骤是开发人员在以此方式使用调试解决方案时需要注意的。

不过,本白皮书中介绍的方法支持灵活调试,即使在有带宽限制的远程调试迫使开发人员避免使用完整的调试图形用户界面的情况下。

此外,英特尔® 开发人员专区现在提供了一个 GNU Project Debugger,该调试器可通过 gdbsever 提供本机英特尔® 至强融核协处理器应用调试支持和远程交叉调试支持。

其它资源

文档
如欲了解有关可用的英特尔调试器命令行语法的详细信息,请参阅以下位置的命令行参考手册:

/opt/intel/composerxe/Documentation/en_US/debugger/cl/index.htm

此外,整个文档的指针、入门指南和调试器用户界面集成用户手册可在以下位置中找到:

/opt/intel/composerxe/Documentation/en_US/debugger/debugger_documentation.htm

使用 Eclipse 集成调试解决方案时,可从英特尔调试器图形用户界面的“帮助”下拉菜单或 Eclipse IDE 的调试器透视图的“帮助”下拉菜单中获取完整的调试器用户手册。

MPSS 2.1 README:
http://registrationcenter.intel.com/irc_nas/2618/readme.txt

GNU* Project Debugger GDB* README
http://registrationcenter.intel.com/irc_nas/2618/gdb-intel-mic-2.1.3126-readme.txt

下载地址

Intel® Composer XE 2013:
http://software.intel.com/en-us/intel-composer-xe/

Java* 运行时环境:
http://www.java.com

Eclipse* CDT: http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers-includes-incubating-components/indigosr2

GNU* Project Debugger GDB*
支持英特尔® 至强融核协处理器的 GNU* Project Debugger GDB* 目前可通过以下位置获取:

http://software.intel.com/en-us/forums/topic/278102

请通过以下地址下载 GDB*

http://registrationcenter.intel.com/irc_nas/2618/gdb-intel-mic-2.1.3126.tgz

本机调试教程

除了这份白皮书,我们还提供了一个教程“实验室”,以便您了解如何调试本机运行应用。假定主机上的当前目录为:~/lab_workspace/debugger/host-dbg/。若要对英特尔® 至强融核协处理器本地应用进行编译,您需要先获得编译器脚本,然后运行 make。makefile 将从 main.cpp mylib.cpp 编译可执行程序和 lib64/libmylib.so 共享库。

$ source /opt/intel/composer_xe_2013/bin/compilervars.sh intel64
$ make all
icpc -g -O0 -mmic -fPIC -c -c main.cpp
icpc -g -O0 -mmic -fPIC -c mylib.cpp
icc -mmic -shared mylib.o -o lib64/libmylib.so
icc -mmic main.o -L./lib64 -lmylib -o prog
x86_64-k1om-linux-ld:
warning: libimf.so, needed by ./lib64/libmylib.so, not
found (try using -rpath or -rpath-link)
x86_64-k1om-linux-ld:
warning: libsvml.so, needed by ./lib64/libmylib.so, not
found (try using -rpath or -rpath-link)
x86_64-k1om-linux-ld:
warning: libintlc.so.5, needed by ./lib64/libmylib.so,
not found (try using -rpath or -rpath-link)

警告表明,在主机上构建的过程中,没有找到英特尔® 至强融核协处理器上执行所需的动态链接的共享对象。只要这些共享对象存在并且运行时在其协处理器的相应路径中,这些警告就是无害的。

我们将在下一部分中处理这个问题。

实验室 1使用 IDB 来进行英特尔® 至强融核协处理器本机调试

将文件复制到协处理器中

打开一个终端,在英特尔® 至强融核 协处理器上创建面向该应用的目标目录:

$ ssh 172.31.x.x

# cd tmp
# mkdir target-dbg
# cd target-dbg
# mkdir lib64

将主机中的该应用和共享库上传到英特尔® 至强融核 协处理器卡中:
$ sudo scp /tmp/host-dbg/prog mic0:/tmp/target-dbg/
$ sudo scp /tmp/host-dbg/lib64/libmylib.so
mic0:/tmp/target-dbg/lib64

上传本例所需的编译器共享库:
$ sudo scp /opt/intel/composerxe/lib/mic/libintlc.so
mic0:/tmp/target-dbg/lib64/
$ sudo scp /opt/intel/composerxe/lib/mic/libintlc.so.5
mic0:/tmp/target-dbg/lib64/
$ sudo scp /opt/intel/composerxe/lib/mic/libimf.so
mic0:/tmp/target-dbg/lib64/
$ sudo scp /opt/intel/composerxe/lib/mic/libsvml.so
mic0:/tmp/target-dbg/lib64/

启动调试器,启动被调试应用

启动调试器:
$ idbc_mic -tco -rconnect=tcpip:mic0:2000

英特尔(R) 调试器远程服务器,Build [79.xxx.xx]
此版本针对 Linux 上的 k1om 进行配置
英特尔公司 (C) 2006-2012 年版权所有。所有权保留。
英特尔(R) 集成众核架构调试器(英特尔(R) MIC 调试器)Version 13.0, Build [79.280.23]
注:此产品的试用期将在 585 天后结束。

设置远程文件:
(idb) idb file-remote /tmp/target-dbg/prog


设置环境:
(idb) set env LD_LIBRARY_PATH /tmp/target-dbg/lib64
(idb) set solib-search-path /usr/linux-k1om-4.7/linux-k1om/lib64/lib:/usr/linux-k1om-4.7/x86_64-k1om-linux/lib64


设置符号文件:
(idb) file ~/lab_workspace/debugger/host-dbg/prog
Reading symbols from ~/lab_workspace/debugger/host-dbg/prog...done.

信息:未分配位置时,优化变量将显示为 <no value>

在 main 中设置一个断点,启动该应用:
(idb) break main
Breakpoint 1 at 0x400703:
file ~/lab_workspace/debugger/host-dbg/main.cpp, line 36.
(idb) run
Starting program:
~/lab_workspace/debugger/host-dbg/prog
[New Thread 4614 (LWP 4614)]
Breakpoint 1, main (argc=1, argv=0x7fff9098b3a8) at ~/lab_workspace/debugger/host-dbg/main.cpp:36
5       printPid();

调试您的应用并
(idb) quit

实验室 2使用 IDB 来进行英特尔® 至强融核协处理器本机调试

打开另一个终端并启动被调试应用:

$ telnet 172.31.x.x
Trying 172.31.x.x...

Connected to 172.31.x.x.
Escape character is '^]'.

Intel® Xeon Phi™ Coprocessor Platform Software Stack release 2.0
Kernel 2.6.34-g38bc7c2 on an k1om

~ # cd tmp/target-dbg/
/tmp/target-dbg # export LD_LIBRARY_PATH=~/lab_workspace/debugger/target-dbg/lib64
~/lab_workspace/debugger/target-dbg # ./prog
PID:
3966

被调试程序在控制台上打印其 PID。在另一个终端中,我们可以命令 IDB 调试该进程:

$ idbc_mic -tco -rconnect=tcpip:mic0:2000

英特尔(R) 集成众核架构调试器(英特尔(R) MIC 调试器)Version 13.0, Build [79.280.23]
注:此产品的试用期将在 585 天后结束。

(idb) attach 3966 ~/lab_workspace/debugger/host-dbg/prog

Attaching to program:
~/lab_workspace/debugger/host-dbg/prog, process 3966
[New Thread 3966 (LWP 3966)]
Reading symbols from ~/lab_workspace/debugger/host-dbg/prog...done.

__mktime_internal () in /lib64/libc-2.12.so

在工作循环上设置一个断点:

(idb) break main.cpp:38
信息:未分配位置时,优化变量将显示为 <no value>
Breakpoint 1 at 0x40070c: file /nfs/iul/disks/iul_team2/msturm/TPT/ISV-Workshop-lab/host-dbg/main.cpp, line 38.

(idb) continue
Continuing.


Breakpoint 1, main (argc=1, argv=0x7fff92b35798) at /nfs/iul/disks/iul_team2/msturm/TPT/ISV-Workshop-lab/host-dbg/main.cpp:38
38        while(loop)sleep(1);

在工作循环外设置一个断点,将循环变量设为 0 并继续:

(idb) b main.cpp:39
Breakpoint 2 at 0x400729:
file /nfs/iul/disks/iul_team2/msturm/TPT/ISV-Workshop-lab/host-dbg/main.cpp, line 39.
(idb) p loop=0
$1 = false
(idb) c
Continuing.


Breakpoint 2, main (argc=1, argv=0x7fff92b35798) at /nfs/iul/disks/iul_team2/msturm/TPT/ISV-Workshop-lab/host-dbg/main.cpp:39
39        printMsg("Test message");
(idb) c
Continuing.

Program exited normally.

“MSG:Test message”将打印到其它控制台,该应用退出。

作者简介

Robert Mueller-Albrecht 是英特尔公司的一名技术咨询工程师,主要致力于面向嵌入式计算的软件开发工具解决方案以及针对各种基于英特尔® 架构的设计的调试解决方案。他于 2001 年加盟英特尔,之前曾就职于 CAD-UL AG,拥有凯撒斯劳滕工业大学(Technical University of Kaiserslautern)的物理学理学硕士学位。

声明

本文件中包含关于英特尔产品的信息。本文件不构成对任何知识产权的授权,包括明示的、暗示的,也无论是基于禁止反言的原则或其他。除英特尔产品销售的条款和条件规定的责任外,英特尔不承担任何其他责任。英特尔在此作出免责声明:本文件不构成英特尔关于其产品的使用和/或销售的任何明示或暗示的保证,包括不就其产品的(i)对某一特定用途的适用性、(ii)适销性以及(iii)对任何专利、版权或其他知识产权的侵害的承担任何责任或作出任何担保。

除非经过英特尔的书面同意认可,英特尔的产品无意被设计用于或被用于以下应用:即在这样的应用中可因英特尔产品的故障而导致人身伤亡。

英特尔有权随时更改产品的规格和描述而毋需发出通知。设计者不应信赖任何英特产品所不具有的特性,设计者亦不应信赖任何标有“保留权利”或“未定义”说明或特性描述。对此,英特尔保留将来对其进行定义的权利,同时,英特尔不应为因其日后更改该等说明或特性描述而产生的冲突和不相容承担任何责任。此处提供的信息可随时改变而毋需通知。请勿根据本文件提供的信息完成一项产品设计。

本文件所描述的产品可能包含使其与宣称的规格不符的设计缺陷或失误。这些缺陷或失误已收录于勘误表中,可索取获得。

在发出订单之前,请联系当地的英特尔营业部或分销商以获取最新的产品规格。

索取本文件中或英特尔的其他材料中提的、包含订单号的文件的复印件,可拨打1-800-548-4725,或登陆: http://www.intel.com/design/literature.htm

英特尔、Intel 标识、VtuneCilk 和至强是英特尔公司在美国和其他国家(地区)的商标。

Java Oracle /或其附属公司的注册商标。

* 其他的名称和品牌可能是其他所有者的资产。

英特尔公司 © 2012 年版权所有。所有权保留。

优化声明

Para obtener información más completa sobre las optimizaciones del compilador, consulte nuestro Aviso de optimización.