2011-07-04 28 views
0

我有一個簡單的斷言宏,它打印出一條消息。這通常在應用程序不是控制檯應用程序時起作用(即,我彈出一個很好的對話框,並且具有包含消息的表達式,我可以重試調試),但是當它出現時,控制檯會截取所有消息。當控制檯隱藏在IDE後面時,這變得令人討厭,我不得不釣魚它,然後返回到斷言對話框,並重新嘗試調試。控制檯正在攔截我所有的斷言消息

有什麼辦法阻止它攔截消息,以便彈出的對話框包含所有信息。

宏是這樣的:

#define MyAssert(_Exp, _Msg) assert(_Exp && _Msg) 

編輯:截圖

enter image description here

+0

控制檯截獲消息時對話框的外觀如何? –

+0

可能幫助:http://support.microsoft.com/kb/111753 – keyboardP

+0

@Mike:我添加了屏幕截圖 – Samaursa

回答

3

的CRT試圖找出其中你想斷言的輸出爲基於應用程序的類型。它從可執行文件的類型(/ SUBSYSTEM)中檢測到它。但是,您可以使用_set_app_type覆蓋,以便CRT可以像您的控制檯應用程序是Windows應用程序那樣工作。更有可能的是,你只是想要影響斷言,所以應該調用_CrtSetReportMode來更改爲_CRTDBG_MODE_WNDW

您沒有指定VS版本,但是這些對於所有最新版本都是可用的(VS2003中有細微的命名差異)。

Martyn

+0

該帖子標籤爲'visual-studio-2008',第一次錯過了我自己。 (+1不知道關於'_CrtSetReportMode',知道的很好) – user786653