簡體   English   中英

如何在 Visual Studio 2013 中的調試模式下關閉斷言

[英]How to turn off ASSERTs in debug mode in Visual Studio 2013

有沒有辦法關閉斷言而不是切換到發布模式。 我需要調試一個經常進行斷言的代碼,它會減慢我的工作速度。 這些斷言與我試圖解決的問題無關,所以現在它們只會減慢我的進度,因為它們在我的一個基類中經常被調用。 現在我沒有時間改進他們的設計,所以有人可以告訴我是否有辦法在處於調試模式並使用它的功能時關閉斷言。

用戶_CrtSetReportMode

int iPrev = _CrtSetReportMode(_CRT_ASSERT,0);
// Start Operation with no ASSERTs
...
// Restore previous mode with ASSERTs
_CrtSetReportMode(_CRT_ASSERT,iPrev);

除了使用 0,您只能使用 _CRTDBG_MODE_DEBUG。

您可以使用_set_error_mode_CrtSetReportMode (請參閱 xMRi 的答案)來更改失敗報告方法並避免模態對話框。 請參閱那里的代碼片段:

int main()
{
   _set_error_mode(_OUT_TO_STDERR);
   assert(2+2==5);
}

另請注意,斷言失敗通常是有原因的,您希望修復代碼,而不僅僅是取消報告。 通過從調試版本中完全刪除它們,您只是破壞了為您構建的好東西。

#define NDEBUG#include <assert.h>之前禁用assert宏。

您可以將其添加到項目設置中的預處理器定義中。

您可以添加編譯器標志/DNDEBUG來關閉斷言。 我覺得這更干凈,因為您不必更改代碼中的任何內容。

Fromm MSVC 文檔

您可以使用 /DNDEBUG 命令行選項關閉斷言宏,而無需修改源文件。

我沒有 Visual Studio 2013,但以下內容在 Visual Studio 2015 中對我有用,所以對於 VS 2013 可能相同或類似的東西也適用。

在您的 main() 函數中,調用

_set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);

在 Visual Studio 中,轉到調試/Windows/異常設置。 在異常設置中,轉到 Win32 異常 / 0xc0000420 斷言失敗。 取消選中該條目前面的框。

我需要以上兩個來抑制調試模式下的斷言彈出窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM