如何在正在运行的应用程序中访问调试信息

时间:2014-01-24 08:36:20

标签: openvms vms

我想知道是否可以在使用/ DEBUG(Pascal和/或C)编译的正在运行的应用程序中访问调试信息,以便检索有关应用程序中使用的结构的信息。

3 个答案:

答案 0 :(得分:1)

应用程序总是可以要求调试器使用SS$_DEBUG执行某些操作。如果发送以GO结尾的命令列表,那么应用程序将在调试器完成后继续运行。我已经用它来转储一堆格式整齐的结构,而不用费心去编写代码。

ANALYZE/IMAGE可用于检查映像文件中的调试器数据,而无需运行应用程序。

答案 1 :(得分:1)

虽然您可能看不到很好的调试器信息,但您始终可以使用ANALYZE / SYSTEM查看正在运行的程序的数据.SET PROCESS ... EXAMINE .... SDA SEARCH命令可以派上用场来“找到”可识别的日期,就像你知道程序必须阅读的记录一样。 另请查看FORMAT / TYPE = block-type,但要使用数据,您必须将结构编译为.STB文件。

使用SDA时,您可能希望尝试在其他会话中以交互方式运行程序,以便从中获取示例样本地址....比链接映射更容易! 如果您的程序使用RMS(我的总是:-),那么SDA> SHOW PROC / RMS =(FAB,RAB)可以为记录和密钥缓冲区提供方便的地址,尽管这些也可以由RTL管理,因此对您没有意义。

答案 2 :(得分:1)

评论太长了......

据我所知,有关元素的结构信息不在全局符号表中。 我在Linux上做了什么,但这也适用于VMS / ELF文件:

$ cat tests.c
struct {
        int ii;
        short ss;
        float ff;
        char cc;
        double dd;
        char bb:1;
        void *pp;
} theStruct;
...
$ cc -g -c tests.c
$ ../extruct/extruct 
-e-insarg, supply an ELF object file.
Usage: ../extruct/extruct [OPTION]... elf-file variable
 Display offset and size of members of the named struct/union variable
 extracted from the dwarf info in the elf file.
 Options are:
  -b        bit offsets and bit sizes for all members
  -lLEVEL   display level for nested structures
  -n        only the member names
  -t        print base types
$ ../extruct/extruct -t ./tests.o theStruct
size of theStruct: 0x20
offset size   type name
0x0000 0x0004 int ii
0x0004 0x0002 short int ss
0x0008 0x0004 float ff
0x000c 0x0001 char cc
0x0010 0x0008 double dd
0x0018 0x0001 char bb:1
0x001c 0x0004 pp
$