2009-05-06 117 views
6

我有一個使用Mozilla LDAP庫的應用程序。我們正在診斷涉及LDAP庫無法連接到服務器的問題。我試圖通過使用ldap_set_opt在應用程序中拋出lib的調試版本並啓用調試來從LDAP庫中獲取更多信息。不幸的是,我認爲調試庫正在將調試字符串發送到標準錯誤。如何捕獲Windows服務的標準錯誤輸出?

雖然我正在重新編譯LDAP客戶端庫,希望啓用使其調用OutputDebugString而不是流到stderr的選項,但一個很好的解決方案是將stderr輸出捕獲到文件。該應用程序雖然作爲Windows服務運行。

任何人都知道如何將stderr重定向到作爲服務運行的應用程序的文件?

編輯

我希望不要有修改任何更多的服務的源代碼的比我已經有了。服務配置中的選項是理想的。

回答

5

你可以嘗試手動重定向標準錯誤?

FILE* stderr_redirect = freopen("C:/stderr.log", "w", stderr); 

    // Code that writes to stderr 

    fclose(stderr_redirect);

編輯:

有沒有辦法來重定向stdout或stderr,除用於處理你的服務裏面自己那些流的服務。某些服務提供將這些消息重定向到文件的選項。您可以臨時重定向這些流,或者在您的服務中添加一個選項,以便在下次出現問題時對其進行配置。

+0

嗯......好,謝謝你的確認Naaff。我想我會去工作。 – veefu 2009-05-06 18:59:50

5

如果要修改代碼的服務,你可以調用SetStdHandle在你的ServiceMain:

SetStdHandle(STD_ERROR_HANDLE, logFileHandle); 
相關問題