2014-05-18 50 views
2

我正在調試將通過CreateProcess從本機Windows程序加載的cygwin gcc編譯過程。我想在主之前設置一個斷點,例如mainCRTStartup使用gdb附加到尚未啓動的進程

如何附加到尚未加載的進程並在mainCRTStartup處設置斷點?

注意

如果它的事項,它不是XY問題。我正在分析Windows 2012 R2中的一個可能的錯誤,並且需要跟蹤從調用CreateProcess傳遞的整個命令行直到加載進程的主入口點。在我接近MS之前,我需要確定問題出在哪裏。

另外我需要使用gdb,因爲WinDBG可能無法源碼調試一個cygwin gcc編譯的二進制文件。

我有什麼企圖

使用GFLAGS,我試圖調用GDB當過加載圖像,但隨後不幸被一條消息招呼「文件名太長」,然後調用GDB沒有任何主動過程

這種方法的問題是,gflags調用調試器,圖像名稱後跟命令行參數,其中gdb需要PID或圖像名稱而不帶命令行參數。參考How to attach a process in gdb

+0

你會怎麼辦* *任何一個不存在的過程?這很簡單:你不能。你會介意告訴我們你爲什麼要這樣做? (請閱讀[XY問題](http://meta.stackoverflow.com/questions/66377/what-is-the-xy-problem)。) –

+0

@JoachimPileborg:它不是'XY問題'。我正在分析Windows 2012 R2中的一個可能的錯誤,並且需要跟蹤從調用CreateProcess傳遞到整個主入口點的整個命令行。在我接近MS之前,我需要確定問題出在哪裏。 – Abhijit

+0

你沒有告訴我們爲什麼*你想做你想做的事情,你只是想知道如何使你當前的解決方案工作。所以確實是一個XY問題。現在我們至少知道你想做什麼,有知識的人可以說出你想要的解決方案是否可行,或者是否有其他解決方案(以前沒人能做到的最後一個)。 –

回答

0

您可以指示Windows在調試器啓動時自動運行某些進程。這是通過創建類型REG_SZ的註冊表值HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<whatever.exe>\Debugger來完成的,其中包含要用作調試器的gdb可執行文件的完整路徑/名稱。

參考文獻:

  1. http://msdn.microsoft.com/en-us/library/a329t4ed(vs.71).aspx
  2. http://bugslasher.net/2011/03/26/how-to-debug-a-process-as-soon-as-it-starts-with-windbg-or-visual-studio-2010/
+0

工作我相信我嘗試了類似的事情使用gflags,但迎來了一個消息「文件名太長」,然後調用gdb沒有任何活動進程:-( – Abhijit

+0

這種方法的問題是, gflags調用帶有圖像名稱和命令行參數的調試器,其中gdb需要PID或圖像名稱而不帶命令行參數,參考[如何在gdb中附加進程](http://stackoverflow.com/問題/ 14370972 /如何對連接-A-過程中,GDB) – Abhijit

0

那麼,你可以真正做到這一點,我想。如果你願意付出一些努力。

步驟: 1)構建您自己的cygwin1.dll副本,如此處所述:http://cygwin.com/faq.html#faq.programming.building-cygwin。在配置時添加「--enable-debugging」標誌。

2)與自己的副本替換現有的cygwin1.dll,如下所述:https://cygwin.com/faq.html#faq.setup.snapshots(顯然,你不會做的焦油的東西)

3)設置環境變量CYGWIN_DEBUG =,其中是您正在嘗試調試的程序的名稱。我想,請注意,Cygwin基本上在這裏使用「包含」方法。因此,它將啓動一個會話GDB嘗試推出其名稱包含你把你的CYGWIN_DEBUG可變

注意事項字符串的程序的任何時間:

1)--enable-調試開關會使你的應用程序運行非常緩慢,並不完全穩定。

在這裏看到:http://cygwin.com/ml/cygwin/2014-05/msg00316.html

相關問題