相关疑难解决方法(0)

为什么使用WinDbg与Visual Studio(VS)调试器?

使用WinDbg与Visual Studio调试器的主要原因是什么?

它是否通常用作Visual Studio调试器的完全替代品,或者在需要时用作更多.

windbg visual-studio

58
推荐指数
3
解决办法
2万
查看次数

分析windbg中的崩溃转储

我正在使用第三方封闭源API,它会抛出一个异常,指出"所有命名管道都很忙".

我想进一步调试(而不仅仅是单步执行),这样我才能真正了解幕后发生的事情.

我使用WinDbg转储了这个过程.我现在应该用什么命令来分析这个转储?

谢谢

debugging windbg

6
推荐指数
3
解决办法
3万
查看次数

我们可以从ExitInstance调用FreeLibrary吗?

从MSDN文档中我们可以看到,我们不应该在DllMain入口点函数中调用LoadLibrary/FreeLibrary.

入口点功能应该只执行简单的初始化或终止任务.它不能调用LoadLibrary或LoadLibraryEx函数(或调用这些函数的函数),因为这可能会在DLL加载顺序中创建依赖循环.这可能导致在系统执行其初始化代码之前使用DLL.类似地,入口点函数不能调用FreeLibrary函数(或调用FreeLibrary则函数)过程终止期间,因为这可能会导致一个DLL正在使用的系统已经执行其终止代码之后.

我的问题是:我们可以从ExitInstance()调用FreeLibrary吗?例如:

Test.exe - 主要可执行文件

HINSTANCE hDllMFC = LoadLibrary(L"TestApp.dll");
if (hDllMFC != NULL)
{
    FreeLibrary(hDllMFC);
}

while unload the hDllMFC, the call stack looks like:

TestApp.dll!CTestAppApp::ExitInstance() Line 42 C++
TestApp.dll!InternalDllMain() Line 155  C++
TestApp.dll!DllMain() Line 272  C++
TestApp.dll!__DllMainCRTStartup() Line 512  C
TestApp.dll!_DllMainCRTStartup() Line 477   C
ntdll.dll!LdrpUnloadDll()   Unknown
ntdll.dll!LdrUnloadDll()    Unknown
KernelBase.dll!FreeLibrary()    Unknown
Test.exe!wmain() Line 17    C++
Run Code Online (Sandbox Code Playgroud)

TestApp.dll - 动态链接到MFC的常规DLL

CTestApp theApp;
HINSTANCE hDllResource = NULL;

BOOL CTestApp::InitInstance()
{
    hDllResource = ::LoadLibrary(L"TestApp_Resource.dll");

    return CWinApp::InitInstance();
}

int CTestApp::ExitInstance()
{
    ::FreeLibrary(hDllResource);

    return …
Run Code Online (Sandbox Code Playgroud)

windows dll mfc

6
推荐指数
1
解决办法
1604
查看次数

标签 统计

windbg ×2

debugging ×1

dll ×1

mfc ×1

visual-studio ×1

windows ×1