我在msvcr100.dll中发生崩溃,仅在调试中发生。我怀疑发布/调试差异。我不明白为什么这个dll作为依赖于此可再发行版本的发布版本(而其他dll编译方式与此相同)
这是程序崩溃时的堆栈
ntdll.dll!_RtlpWaitOnCriticalSection@8() Unknown
ntdll.dll!_RtlEnterCriticalSection@4() Unknown
msvcr100.dll!_lock_file(_iobuf * pf) Line 236 C
bard.dll!std::basic_filebuf<char,std::char_traits<char> >::_Lock() Line 310 C++
bard.dll!std::basic_istream<char,std::char_traits<char> >::_Sentry_base::_Sentry_base(std::basic_istream<char,std::char_traits<char> > & _Istr) Line 78 C++
bard.dll!std::basic_istream<char,std::char_traits<char> >::sentry::sentry(std::basic_istream<char,std::char_traits<char> > & _Istr, bool _Noskip) Line 99 C++
bard.dll!std::getline<char,std::char_traits<char>,std::allocator<char>
我使用visual studio 2010编译,项目使用poco 1.4.1
以前调试版本运行正常,msvcr100.dll没有不必要的依赖。自那以后,构建过程发生了很大的变化,我真的不知道在哪里看。什么会导致这类问题?
根据依赖墙,依赖是直接的,当我通过调试运行程序指向这些函数时:
GetProcAddress(0x75770000 [KERNEL32.DLL], "FlsAlloc") called from "MSVCR100.DLL" at address 0x71FABA3B and returned 0x75784EE3.
GetProcAddress(0x75770000 [KERNEL32.DLL], "FlsGetValue") called from "MSVCR100.DLL" at address 0x71FABA48 and returned 0x75781252.
GetProcAddress(0x75770000 [KERNEL32.DLL], "FlsSetValue") called from "MSVCR100.DLL" at address 0x71FABA55 and returned 0x757841C0.
GetProcAddress(0x75770000 [KERNEL32.DLL], "FlsFree") called from "MSVCR100.DLL" at address 0x71FABA62 and returned 0x7578354F.
当查看预处理器的相应输出时,我看到:
#line 6193 "C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\include\\winbase.h"
[...]
__declspec(dllimport)
DWORD
__stdcall
FlsAlloc(
PFLS_CALLBACK_FUNCTION lpCallback
);
__declspec(dllimport)
PVOID
__stdcall
FlsGetValue(
DWORD dwFlsIndex
);
__declspec(dllimport)
BOOL
__stdcall
FlsSetValue(
DWORD dwFlsIndex,
PVOID lpFlsData
);
__declspec(dllimport)
BOOL
__stdcall
FlsFree(
DWORD dwFlsIndex
);
答案 0 :(得分:1)
在Visual Studio中,转到Property Pages-->C/C++-->Code Generation-->Runtime Library
并确保它是&#34;多线程调试DLL&#34;而不是&#34;多线程DLL&#34;。或者,如果从命令行构建,则应包括/ MDd而不是/ MD标志。
答案 1 :(得分:0)
如果您不知道,可以使用(优秀)软件http://www.dependencywalker.com/来找出二进制文件的依赖关系。您将很容易看到调试的来源,并帮助您找出问题所在。