2014-01-24 28 views
1

我想知道是否可以訪問已使用/ DEBUG(Pascal和/或C)編譯的正在運行的應用程序中的調試信息,以便檢索有關所用結構的信息在應用程序中。如何訪問正在運行的應用程序中的調試信息

+0

您能否給一些你想做的事更多信息/實現?如果使用/ debug進行編譯,則調試信息位於目標模塊中。如果鏈接/調試 - 通常 - 調試信息在可執行文件中。當您只運行該可執行文件時,調試器會接管並將映像文件中的調試信息讀取到內存中。如果使用/ nodebug運行該可執行文件,則調試信息不​​在內存中的任何位置。 – user2116290

+0

對於結構體,如果你想檢索元素名稱(大小和偏移量),你可以從調試信息中得到它。在那裏,爲ELF/DWARF做了這個,但在運行時沒有,我只是從目標文件中解析DWARF信息。由於OpenVMS/I64使用ELF和DWARF,幾乎所有必要的信息都是公開的。對於Alpha和VAX,調試記錄上沒有太多公開信息。 – user2116290

+0

我想實現的是基於調試符號表中結構信息的代碼生成。顯然這還沒有做過。我發現了一些使用全局符號的示例代碼,但它並沒有真正幫助我。我還在免費軟件光盤上找到了一些用於閱讀符號表的代碼,但是在構建它之後,我的系統(7.3-2)無法運行。 –

回答

1

應用程序總是可以讓調試器使用SS$_DEBUG來做某些事情。如果您發送以GO結尾的命令列表,則應用程序將在調試器完成其任務後繼續運行。我用它來轉儲一堆整齊排列的結構,而不必編寫代碼。

ANALYZE/IMAGE可用於在不運行應用程序的情況下檢查映像文件中的調試器數據。

+0

爲了完整起見,即「通過發信號通知SS $ _DEBUG,例如通過調用LIB $ SIGAL。」我在許多程序中構建它。它在沒有任何信息的情況下打敗了一場比賽。 – Hein

1

儘管您可能看不到漂亮的調試器信息,但您始終可以使用ANALYZE/SYSTEM來查看正在運行的程序的數據。SET PROCESS ... EXAMINE .... SDA SEARCH命令可能會派上用場,找到'可識別的日期,就像你知道程序必須讀取的記錄一樣。 也檢查出FORMAT/TYPE =塊類型,但要利用數據,你必須將你的結構編譯成.STB文件。

使用SDA時,您可能想嘗試在另一個會話中以交互方式運行程序,以獲取樣例地址,以便...比鏈接圖更簡單! 如果你的程序使用了一堆RMS(我總是這麼做:-),那麼SDA> SHOW PROC/RMS =(FAB,RAB)可能會爲記錄和密鑰緩衝區提供方便的地址,所有這些也可能由RTL管理,因此對你沒有意義。

+0

無論OP真正想用調試信息做什麼,STB(Symbol TaBle)文件都由鏈接器生成,它們包含全局符號。 C編譯器(也可能是Pascal編譯器)不會(也不應該)爲結構元素創建全局符號。因此他們的名字不會在STB中顯示。也就是說,當使用SDL(結構定義語言)來定義結構並將生成的輸出包括到C(或Pascal)源中時,還可以生成MACRO輸出,並讓MACRO生成全局符號,這些全局符號可用於生成一個STB。 – user2116290

+0

只有在OpenVMS/I64上,一個STB相當於一個目標文件,因此它足以生成一個OBJ文件,因此它是 。 – user2116290

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 
$ 
相關問題