2011-05-20 34 views
5

我有用C#和PDF打印機編寫的.NET GUI應用程序。 PDF打印機有一個字段,您可以設置一個命令來啓動一個外部應用程序。如何在Visual Studio 2010中調試從另一個進程啓動的C#.NET應用程序

在這種情況下,我可以使用此打印機打印文檔,並且打印機啓動帶有文件路徑的EXE文件作爲參數生成的PDF文件。從打印機啓動時,如何調試我的應用程序?

在視覺 工作室  2010年,我可以設置命令行參數的調試信息,這工作正常。但是,如果應用程序從打印機啓動,則應用程序無法正常工作。因此,我想在從打印機啓動時調試我的應用程序。我怎樣才能做到這一點?是否有一個參數在調試模式下啓動EXE文件或類似的東西?

回答

8

您可以附加到一個進程,當它開始使用一個小的註冊表調整。

轉到

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options 

創建可執行文件的名稱的新的密鑰它會出現在Task Manager,例如,myapp.exe。在此之下,創建一個名爲debugger的新字符串值並將其設置爲vsjitdebugger.exe

現在,當EXE文件被觸發時,會出現一個窗口,詢問要附加哪個調試器。

+0

這可能相當有用! – 2011-05-20 15:36:13

+0

非常感謝..這就是我一直在尋找的東西。 – CubaLibre 2011-05-20 15:41:13

+0

我遇到問題了!當我刪除創建的註冊表項時,它不起作用。窗口仍然出現,並詢問要附加哪個調試器! – CubaLibre 2011-07-12 15:11:01

9

嘗試連接到進程:

http://msdn.microsoft.com/en-us/library/c6wf8e4z.aspx

要附加到正在運行的進程 1.On調試菜單,選擇附加到進程。如果沒有項目打開,請在工具菜單上選擇 附加到處理。

2.在「附加到進程」對話框中,從「可用進程」 列表中找到要附加到 的程序。

a。如果您想要調試的程序 正在另一臺計算機上運行,​​您必須先選擇遠程的 計算機。有關更多信息,請參閱 如何:選擇遠程機器。

b。如果該過程下 不同的用戶帳戶運行,選擇 顯示進程從所有用戶中選中 框。

c。如果通過遠程連接 桌面連接,請選中在所有會話中顯示 進程複選框。

3.在Attach to框中,確保您要調試的代碼類型爲 。默認自動設置 會嘗試確定要調試的代碼類型 。如果自動 設置不合適:

a.Click選擇。

b。在選擇代碼類型對話框中, 單擊調試這些代碼類型和 選擇要調試的類型。

c。單擊確定。

4.單擊附件。

可用進程列表爲 當您打開 進程對話框時會自動顯示。進程 可以在對話框打開時在後臺啓動和停止 。但是, 的內容並不總是最新的。 您可以隨時刷新列表 以通過單擊刷新來查看當前進程列表 。

當您正在調試時,您可以連接到多個 程序,但是 調試器中只有一個程序在任何時間處於活動狀態。您可以在調試位置 工具欄或進程窗口中設置 活動程序。有關 的更多信息,請參閱如何:設置當前程序 。

所有調試菜單執行命令 都會影響活動程序。您可以從 「進程」對話框中打斷任何已調試的程序,或從「調試」菜單中打斷所有連接的程序的 。 有關更多信息,請參見如何: Break Execution。

+0

問題是該進程沒有運行。當我從例如打印文件Word,打印機只會生成一個pdf文件並打開我的exe文件。所以沒有進程正在運行。 – CubaLibre 2011-05-20 15:30:17

+0

什麼是您的應用程序的主機進程?您可以附加到主機進程 – 2011-05-20 15:31:57

+0

。即在過去/現在調試共享點時,我們連接到IIS進程。 – 2011-05-20 15:33:24

1

考慮在您的代碼中添加一個調用,明確要求將調試器連接到當前位置。這已經在Win32的日子裏出現了,並且在.NET中表現爲System.Diagnostics.Debugger.Break(和System.Diagnostics.Debugger.Launch)。

您還可以添加邏輯來決定何時觸發這個,如果你不想做第一次通過:

#if DEBUG 
     if (++staticCounter > 3) System.Diagnostics.Debugger.Break(); 
    #endif 

,當然,你要禁用它生產。

相關問題