草庐IT

printf-debugging

全部标签

c++ - 哪些因素使迭代器在 Debug模式下如此缓慢(VC++ 2012)

我有一个包含10000个随机数(mod100)的vector,我想计算其中两个数字之和为100的对数。我写了以下内容:autonoPairsSumTo100=0;constautoitEnd=end(myNums);for(autoit1=begin(myNums);it1!=itEnd;++it1){for(autoit2=it1;it2!=itEnd;++it2){if(*it1+*it2==100){noPairsSumTo100++;}}}在我的机器上,这需要大约21.6秒才能在Debug模式下运行。如果我设置_ITERATOR_DEBUG_LEVEL=0(将_SECURE_S

c++ - 启用 _GLIBCXX_DEBUG 后,Stringstream 无法使用 double

我正在使用_GLIBCXX_DEBUG模式来帮助查找我的代码中的错误,但我遇到了一个问题,我认为这是库中的一个错误,但希望有人能告诉我我只是做错了什么。这是一个重现问题的简短示例:#define_GLIBCXX_DEBUG#include#includeintmain(intargc,constchar*argv[]){std::ostringstreamostr;ostr如果我注释掉#define,那么输出是(如预期的那样):Result:1.2有了_GLIBCXX_DEBUG定义,但是输出很简单:Result:我已经追踪到流的_M_num_put字段被保留为NULL,这导致在流中抛

c++ - NDEBUG 和 _DEBUG 在 Visual Studio 2015 中定义在哪里?

我可以转到默认VisualStudio2010项目的设置,并查看在“配置属性”>>“C/C++”>>中定义的NDEBUG或_DEBUG“预处理器”的“预处理器定义”:如果我转到默认VisualStudio2015项目的设置,“预处理器定义”是空的!我什至没有在VisualStudio2015.vcxproj中看到NDEBUG或_DEBUG。我知道它的定义是正确的,因为assert(false)只在调试配置中触发。Microsoft将这些定义隐藏在VisualStudio2015的什么地方?我可以修改它们吗,还是已经被我拿走了?编辑:Niall'sanswer是正确的。我不明白的是,如果

c++ - 尝试将两个相似的 printf 样式调试消息合并到一个函数中

我有两个printf样式的调试日志记录函数(DebuglogfA、DebuglogfB)。两者的操作方式相同,但其中一个日志记录函数将日志记录级别作为参数并忽略低级别调试消息。目前我为每个函数复制了代码,但我希望DebuglogfB能够在调试级别足够高时调用DebuglogfA,而不必在DebuglogfB中创建临时缓冲区。voidDebuglogfA(constchar*lpszText,...){//Initializevariableargumentlistva_listargList;va_start(argList,lpszText);charbuffer[1024];uns

c++ - Visual Studio 2010 上的 VC++ : Release builds using debug heap

我正在对一个慢速C++应用程序进行基准测试/优化,在拍摄一些堆栈快照时,我发现我的应用程序的发布版本正在使用调试堆,因为找到的一些堆栈跟踪表明:ntdll.dll!string"Enablingheapdebugoptions\n"()+0x11056bytes这是一个在Windows7上运行的64位应用程序。我在完全相同的在线环境中看到两三个关于此问题的其他投诉,但没有任何回应。有没有人知道为什么Windows或VisualStudio会使用调试堆来发布构建C++项目? 最佳答案 Thedebugheapisusedwhenapr

c++ - 为什么在使用 "C"语言环境时 printf 可以显示非 ASCII 字符?

注意:我问的是MicrosoftVisualC++2008上的实现定义行为(在2005+上可能相同)。操作系统:Win7简体中文安装。当我使用printf执行非ASCIII/O时,我感到很惊讶。例如//Thiswon'tbenecessaryasit'sthesystemdefaultcodepage.//system("chcp936");//NULLtoshowcurrentlocale,whichis"C"printf("%s\n",setlocale(LC_ALL,NULL));printf("中\n");printf("%s\n",setlocale(LC_ALL,"Engl

c++ - LoadLibrary 失败 : First chance exception 0xC0000139 (DLL Not Found) - How to debug?

我有一个dll“mytest.dll”,当通过LoadLibrary()加载时,返回NULL(并且127作为GetLastError())。如果我在“mytest.dll”上使用DependencyWalker,它会报告它应该正确加载并且正确找到所有DLL。在主机exe上运行DependencyWalker的探查器选项会在日志中显示以下相关部分:00:00:55.099:Loaded"mytest.DLL"ataddress0x07860000bythread0xBBC.Successfullyhookedmodule.00:00:55.115:Firstchanceexception

c++ - gdb 无法进入 printf

这是我的示例程序:#includeintmain(){printf("hellogoodmorning\n");return0;}gcc-Wall-gtemp.c/opt/langtools/bin/gdba.outHPgdb3.3forPA-RISC1.1or2.0(narrow),HP-UX11.00.Copyright1986-2001FreeSoftwareFoundation,Inc.Hewlett-PackardWildebeest3.3(basedonGDB)iscoveredbytheGNUGeneralPublicLicense.Type"showcopying"to

c++ - 为什么迭代器在 VS2010 中导致调试非常缓慢,即使 _HAS_ITERATOR_DEBUGGING、_SECURE_SCL、_SECURE_SCL_THROWS 设置为 0

我一直试图找出为什么在Debug模式下调试我们的程序需要这么长时间。在使用xperf查看堆栈的样子后,很明显我们在迭代器和STL容器上花费了大量时间。我在谷歌上搜索了一会儿,找到了选项_HAS_ITERATOR_DEBUGGING=0_SECURE_SCL=0_SECURE_SCL_THROWS=0我用#define在代码中设置所有这些#define_HAS_ITERATOR_DEBUGGING0#define_SECURE_SCL0#define_SECURE_SCL_THROWS0但这似乎没有用,所以我尝试使用visualstudio项目中的预处理器定义,但似乎仍然没有帮助。我已经

c++ - Windows 8.1 上的 D3D11_CREATE_DEVICE_DEBUG

我正在尝试在Windows8.1上使用D3D11CreateDeviceAndSwapChain创建一个dx11设备。在我安装8.1之前,这在Windows8上是有效的。但是现在当我传递D3D11_CREATE_DEVICE_DEBUG标志时设备创建失败。枚举文档http://msdn.microsoft.com/en-us/library/windows/desktop/ff476107(v=vs.85).aspx声明您需要安装D3D11_1SDKLayers.dll,但它不应该作为Windows8SDK的一部分安装吗?我什至尝试重新安装Windows8SDK,但这没有帮助。有人有什