boost :: regex在调试和发布版本上表现不同

时间:2010-09-08 19:28:31

标签: regex boost debugging release

boost::regex re("^\\s*([_\\w\\.]+)\\s*=\\s*([^\\s]+)$");
if(re.empty()){
  std::cout<<"How is this possible?"<<std::endl;
}

该行打印在我的发布版本中! (调试版本很好) 使用MSVC 2008(vc 9.0)

DEBUG的编译器选项:

/Od /I "C:\Program Files\boost\boost_1_44_0" /I "C:\gtest-1.5.0\include" /I "include" /I "include\EMP" /I "dependencies\EMP\include" /I "dependencies\APR\apr-1.3.3\include" /I "dependencies\solclient_5.0.0.22\include" /I "dependencies\SS66\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "EMP_WIN_X86_32" /D "_iso_stdcpp_" /D "_CRT_SECURE_NO_DEPRECATE" /D "_SECURE_SCL=0" /D "_EMPAPI_STATIC_BUILD" /D "_EMPAPI_STATIC_LINK" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /fp:fast /Fo"Debug\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt

RELEASE的编译器选项:

/O2 /Oi /GL /I "C:\Program Files\boost\boost_1_44_0" /I "C:\gtest-1.5.0\include" /I "include" /I "include\EMP" /I "dependencies\EMP\include" /I "dependencies\APR\apr-1.3.3\include" /I "dependencies\solclient_5.0.0.22\include" /I "dependencies\SS66\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "EMP_WIN_X86_32" /D "_iso_stdcpp_" /D "_CRT_SECURE_NO_DEPRECATE" /D "_SECURE_SCL=0" /D "_EMPAPI_STATIC_BUILD" /D "_EMPAPI_STATIC_LINK" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy /fp:fast /Fo"Release\" /Fd"Release\vc90.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt

DEBUG的链接器选项:

/OUT:"C:\WorkFlow\cpp_client_library\Debug\cpp_client_library.exe" /INCREMENTAL /NOLOGO /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\APR\apr-1.3.3\Release" /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\EMP\lib\win32_vc80" /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\solclient_5.0.0.22\lib" /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\SS66\lib\i86_w32" /LIBPATH:"C:\Program Files\boost\boost_1_44_0\stage\lib" /LIBPATH:"C:\gtest-1.5.0\msvc\gtest\Debug" /MANIFEST /MANIFESTFILE:"Debug\cpp_client_library.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"c:\WorkFlow\cpp_client_library\Debug\cpp_client_library.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT emp.lib libsolclient.lib tipc.lib tutil.lib gtestd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

RELEASE的链接器选项:

/OUT:"C:\WorkFlow\cpp_client_library\Release\cpp_client_library.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\APR\apr-1.3.3\Release" /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\EMP\lib\win32_vc80" /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\solclient_5.0.0.22\lib" /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\SS66\lib\i86_w32" /LIBPATH:"C:\Program Files\boost\boost_1_44_0\stage\lib" /LIBPATH:"C:\gtest-1.5.0\msvc\gtest\Release" /MANIFEST /MANIFESTFILE:"Release\cpp_client_library.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"c:\WorkFlow\cpp_client_library\Release\cpp_client_library.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT emp.lib libsolclient.lib tipc.lib tutil.lib gtest.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

1 个答案:

答案 0 :(得分:0)

我转向使用visual studio 2005,问题消失了,但我现在在应用程序结束时遇到异常:

myApp.exe中0x0042d935处的未处理异常:0xC0000005:访问冲突读取位置0xe06d7390。

调用堆栈是

KERNEL32.DLL!7c812afb()
[下面的框架可能不正确和/或缺失,没有为kernel32.dll加载符号]
KERNEL32.DLL!7c812afb()
msvcp80.dll!7c421201()
msvcp80.dll!7c42394d()
msvcp80.dll!7c423958()
MSVCR80.DLL!78158e89()
myApp.exe!std :: _ Tree,std :: allocator&gt ;,std :: less,std :: allocator,std :: allocator&gt; &GT; &GT;,0&GT; &gt; :: erase(std :: _ Tree,std :: allocator&gt;,std :: less,std :: allocator,std :: allocator&gt;&gt;&gt;,0&gt;&gt; :: iterator _Where = {。 ..})759行 MSVCR80.DLL!78134c39()
myApp.exe!std :: _ Tree,std :: allocator&gt ;,std :: less,std :: allocator,std :: allocator&gt; &GT; &GT;,0&GT; &gt; :: erase(std :: _ Tree,std :: allocator&gt;,std :: less,std :: allocator,std :: allocator&gt;&gt;&gt;,0&gt;&gt; :: iterator _First = {。 ..},std :: _ Tree,std :: allocator&gt ;,std :: less,std :: allocator,std :: allocator&gt;&gt;&gt;,0&gt;&gt; :: iterator _Last = {... })行926 + 0x4f字节 myApp.exe!boost :: re_detail :: w32_regex_traits_implementation :: ~w32_regex_traits_implementation()+ 0xc0 bytes
myApp.exe!boost :: detail :: sp_counted_impl_p&gt; :: dispose()+ 0xf bytes
myApp.exe!std :: list const&gt ;, unsigned long const *&gt ;,std :: allocator const&gt ;, unsigned long const *&gt; &GT; &gt; :: clear()+ 0x3e字节 myApp.exe!boost :: object_cache&gt; :: data :: ~data()+ 0x6b bytes MSVCR80.DLL!781319d8()
MSVCR80.DLL!78131a4b()
myApp.exe!__ tmainCRTStartup()第603行 kernel32.dll!7c817077()