WEB开发网
开发学院操作系统Linux/Unix 在 AIX 中建立特定于产品的调试器 阅读

在 AIX 中建立特定于产品的调试器

 2009-07-15 08:33:40 来源:WEB开发网   
核心提示: 在 example.exp 文件中导出例程为了让插件起作用,必须实现和导出某些例程,在 AIX 中建立特定于产品的调试器(7),为了导出这些例程,我创建了一个名为 “example.exp” 的文件,对于处于维护阶段的复杂产品,也可以使用这种技术,dbx_plugi

在 example.exp 文件中导出例程

为了让插件起作用,必须实现和导出某些例程。为了导出这些例程,我创建了一个名为 “example.exp” 的文件。

dbx_plugin_version 
dbx_plugin_session_init 
dbx_plugin_session_command 
dbx_plugin_session_event 
dbx_plugin_session_destroy 
   

编译插件的命令

下面的命令编译插件,生成 “libdbx_example.so” 文件。

   cc -o libdbx_example.so example.c -bM:Sre -bE:example.exp -bnoentry

使用 dbx 插件进行调试的推荐方法

现在插件已经准备好了,可以使用它调试示例程序了。用 dbx 会话运行示例程序的前几个步骤与前面相同。如果编译的插件 “libdbx_example.so” 放在当前目录中(也是保存示例程序的目录),就不需要导出 DBX_PLUGIN_PATH 变量。在这种情况下,会自动装载此插件,不需要运行 “pluginload <plug-in name>” 命令。

[samyak@mogly plugin_example ]# dbx ./list 
Type 'help' for help. 
reading symbolic information ... 
plug-in "./libdbx_example.so" loaded 
(dbx) stop in free_list 
[1] stop in free_list 
(dbx) run 
Info 1 : 10 
Info 2 : 20 
Info 3 : 30 
Info 4 : 40 
Info 5 : 50 
Info 6 : 60 
Info 7 : 70 
Info 8 : 80 
Info 9 : 90 
Info 10 : 100 
[1] stopped in free_list at line 43 
  43      while(List) { 
(dbx) printlist 
------Printing List ------- 
Node : 0x20000a28 
 Info : 10 
Node : 0x20000a38 
 Info : 20 
Node : 0x20000a48 
 Info : 30 
Node : 0x20000a58 
 Info : 40 
Node : 0x20000a68 
 Info : 50 
Node : 0x20000a78 
 Info : 60 
Node : 0x20000a88 
 Info : 70 
Node : 0x20000a98 
 Info : 80 
Node : 0x20000aa8 
 Info : 90 
Node : 0x20000ab8 
 Info : 100 
 
(dbx) cont 
 
execution completed 
(dbx)quit

在此示例中,我使用 “printlist” 别名输出整个链表。可以使用 plugin example printlist 命令显示相同的输出。这会显示所有节点的内容,不需要为每个节点重复运行命令,因此调试过程显著简化了。在 dbx 会话中的任何时候,都可以使用 pluginunload <plug-in name> 命令卸载此插件。

结束语

本文讲解了如何创建一个与程序相关的插件,可以使用它调试和分析程序的内部信息。对于大型产品,可以把插件扩展到任何级别,可以实现调试所需的关键分析逻辑,显著减少调试时间。对于处于维护阶段的复杂产品,也可以使用这种技术,从而显著降低寻找缺陷所需的调试技能和时间。

上一页  2 3 4 5 6 7 

Tags:AIX 中建 立特

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接