2011-02-10 59 views
6

我想出了一個批處理文件來生成代碼覆蓋率文件,就像寫在這個post中一樣。VS代碼覆蓋工具的批量運行

cl /Zi hello.cpp -link /Profile 
vsinstr -coverage hello.exe 
start vsperfmon /coverage /output:run.coverage 
hello 
vsperfcmd /shutdown 

但是,當我運行批處理文件時,出現了此錯誤消息。

enter image description here

我不得不手動運行vsperfcmd /shutdown完成它。 什麼可能是錯誤的?

回答

5

這只是一個計時問題。

start vsperfmon /coverage /output:run.coverage命令在單獨的進程中啓動vsperfmon.exe。您的腳本繼續運行hello。如果hello是一個非常簡單的程序,它可能會在vsperfmon.exe運行並完全初始化之前執行並完成。如果您的腳本在監視器啓動並運行之前遇到vsperfcmd /shutdown,則會顯示您顯示的錯誤。

vsperfcmd僅僅是vsperfmon控制器/發射器,這樣你就可以在你的批處理文件中使用的是專門:

cl /Zi hello.cpp -link /Profile 
vsinstr -coverage hello.exe 
vsperfcmd /start:coverage /output:run.coverage 
hello 
vsperfcmd /shutdown 

在這種情況下,vsperfcmd第一次調用將阻塞,直到監視器啓動並完全運行。

+0

感謝您的回答,它就像一個魅力。你能幫我解決這個問題嗎? - http://stackoverflow.com/questions/4965173/generating-coverage-file-programmatic-way-with-visual-studio-2010 – prosseek 2011-02-11 02:51:49

0

要用於與IIS Express應用程序已經儀表文件做到這一點:從 C:\Users\<your user>\Documents\IISExpress\config\applicationhost.config

vsperfcmd /start:coverage /output:run.coverage 
"c:\Program Files (x86)\IIS Express\iisexpress.exe" /site:"<that thing you got from applicationhost.config>" 

獲取網站的名稱的瀏覽器可能會自動啓動。在你的代碼中點擊左右,做你的手動測試。

然後完成

vsperfcmd /shutdown