我想知道是否可以訪問已使用/ DEBUG(Pascal和/或C)編譯的正在運行的應用程序中的調試信息,以便檢索有關所用結構的信息在應用程序中。如何訪問正在運行的應用程序中的調試信息
回答
應用程序總是可以讓調試器使用SS$_DEBUG來做某些事情。如果您發送以GO結尾的命令列表,則應用程序將在調試器完成其任務後繼續運行。我用它來轉儲一堆整齊排列的結構,而不必編寫代碼。
ANALYZE/IMAGE可用於在不運行應用程序的情況下檢查映像文件中的調試器數據。
爲了完整起見,即「通過發信號通知SS $ _DEBUG,例如通過調用LIB $ SIGAL。」我在許多程序中構建它。它在沒有任何信息的情況下打敗了一場比賽。 – Hein
儘管您可能看不到漂亮的調試器信息,但您始終可以使用ANALYZE/SYSTEM來查看正在運行的程序的數據。SET PROCESS ... EXAMINE .... SDA SEARCH命令可能會派上用場,找到'可識別的日期,就像你知道程序必須讀取的記錄一樣。 也檢查出FORMAT/TYPE =塊類型,但要利用數據,你必須將你的結構編譯成.STB文件。
使用SDA時,您可能想嘗試在另一個會話中以交互方式運行程序,以獲取樣例地址,以便...比鏈接圖更簡單! 如果你的程序使用了一堆RMS(我總是這麼做:-),那麼SDA> SHOW PROC/RMS =(FAB,RAB)可能會爲記錄和密鑰緩衝區提供方便的地址,所有這些也可能由RTL管理,因此對你沒有意義。
無論OP真正想用調試信息做什麼,STB(Symbol TaBle)文件都由鏈接器生成,它們包含全局符號。 C編譯器(也可能是Pascal編譯器)不會(也不應該)爲結構元素創建全局符號。因此他們的名字不會在STB中顯示。也就是說,當使用SDL(結構定義語言)來定義結構並將生成的輸出包括到C(或Pascal)源中時,還可以生成MACRO輸出,並讓MACRO生成全局符號,這些全局符號可用於生成一個STB。 – user2116290
只有在OpenVMS/I64上,一個STB相當於一個目標文件,因此它足以生成一個OBJ文件,因此它是 。 – user2116290
的評論太長......
據我所知,關於元素的結構信息是不是在全局符號表。 我做了什麼,在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
$
- 1. 這裏WeGo訪問正在運行的應用程序信息
- 2. Valence API應用程序XXX正試圖訪問您的信息。
- 3. 訪問信息/另一個正在運行的應用程序的狀態
- 4. 如何從正在運行的生產Tomcat Web應用程序獲取線程調試信息?
- 5. 如何訪問iOS上所有正在運行的應用程序的統計信息?
- 6. 如何在Linux中調試正在運行的C++程序?
- 7. 「正在調試的程序未運行。」
- 8. 在應用程序中獲取正在運行的線程信息
- 9. 如何在應用程序關閉後訪問意向信息?
- 10. 調試信息存在於我的siverlight 4應用程序中?
- 11. 在Android Studio中缺少調試信息的Android應用程序
- 12. 如何在不在調試中運行Android應用程序?
- 13. 運行不是我正在調試的應用程序?
- 14. Python - 調試正在運行的應用程序
- 15. 如何從Facebook應用程序訪問用戶信息
- 16. 我該如何訪問已在運行的應用程序?
- 17. 如何訪問在Mesos上運行的Web應用程序?
- 18. 從servlet應用程序中訪問server.xml中的主機信息
- 19. 應用程序在調試中運行良好但運行中
- 20. 如何訪問正在運行的程序的內存?
- 21. 蔚藍的遠程應用程序運行不正常使用訪問運行
- 22. 如何從AIR應用程序訪問瀏覽器信息?
- 23. 訪問iphone應用程序中的元數據信息
- 24. 訪問android應用程序中的wakelock統計信息
- 25. 調試時Delphi應用程序有「無調試信息」
- 26. 如何調試訪問OAuth安全API的ASP.Net應用程序?
- 27. 遠程調試在Glassfish中運行的Java Web應用程序
- 28. 在iOS應用程序中捕獲調試信息
- 29. root用戶可以在正在運行的JVM中訪問哪些信息?
- 30. 調試器錯誤:正在調試的程序未運行
您能否給一些你想做的事更多信息/實現?如果使用/ debug進行編譯,則調試信息位於目標模塊中。如果鏈接/調試 - 通常 - 調試信息在可執行文件中。當您只運行該可執行文件時,調試器會接管並將映像文件中的調試信息讀取到內存中。如果使用/ nodebug運行該可執行文件,則調試信息不在內存中的任何位置。 – user2116290
對於結構體,如果你想檢索元素名稱(大小和偏移量),你可以從調試信息中得到它。在那裏,爲ELF/DWARF做了這個,但在運行時沒有,我只是從目標文件中解析DWARF信息。由於OpenVMS/I64使用ELF和DWARF,幾乎所有必要的信息都是公開的。對於Alpha和VAX,調試記錄上沒有太多公開信息。 – user2116290
我想實現的是基於調試符號表中結構信息的代碼生成。顯然這還沒有做過。我發現了一些使用全局符號的示例代碼,但它並沒有真正幫助我。我還在免費軟件光盤上找到了一些用於閱讀符號表的代碼,但是在構建它之後,我的系統(7.3-2)無法運行。 –