如何在程序执行的最开始设置断点

How to set breakpoint at the very beginning of program execution(如何在程序执行的最开始设置断点)
本文介绍了如何在程序执行的最开始设置断点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

如何在加载任何链接的 DLL 之前停止程序?

我尝试在 Break At Function 调试选项中设置 LoadLibraryExW 函数,它在该函数处停止,但在此之前,我在 Visual Studio 输出中有以下内容窗户:

<前>'test.exe':加载 'C:WindowsSystem32 tdll.dll',加载符号(源信息被删除).test.exe":加载C:WindowsSystem32kernel32.dll",加载符号(源信息被删除).'test.exe':已加载 'C:WindowsSystem32KernelBase.dll',已加载符号(源信息已删除).test.exe":加载C:WindowsSystem32uxtheme.dll",加载符号(源信息被删除).'test.exe':已加载 'C:WindowsSystem32msvcrt.dll',已加载符号(源信息已删除).---- 加上大约 30 个 DLL ---

那么如何在加载 ntdll.dll 之前停止调试器中的程序?好的,不是在加载之前,而是在执行任何 DllMain 函数之前和初始化任何静态对象之前.

解决方案

您可以通过将注册表项添加到图像文件执行选项"并使用您的 exe 名称来实现.添加名为Debugger"的字符串类型值并将其设置为 vsjitdebugger.exe 以启动即时调试器对话框.然后,您可以选择一种可用的调试器,包括 Visual Studio.此对话框在 Windows 加载 EXE 之后,在任何代码开始运行之前立即触发.

这是在您启动 notepad.exe 时触发对话框的示例 .reg 文件.将密钥名称修改为您的 .exe:

REGEDIT4[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options
otepad.exe]"调试器"="vsjitdebugger.exe"

How can I stop the program before loading any of the linked DLLs?

I've tried to set LoadLibraryExW function in the Break At Function debugging option and it stops at that function, but before that I have the following in Visual Studio output windows:

'test.exe': Loaded 'C:WindowsSystem32
tdll.dll', Symbols loaded (source information stripped).
'test.exe': Loaded 'C:WindowsSystem32kernel32.dll', Symbols loaded (source information stripped).
'test.exe': Loaded 'C:WindowsSystem32KernelBase.dll', Symbols loaded (source information stripped).
'test.exe': Loaded 'C:WindowsSystem32uxtheme.dll', Symbols loaded (source information stripped).
'test.exe': Loaded 'C:WindowsSystem32msvcrt.dll', Symbols loaded (source information stripped).
---- plus about 30 DLLs ---

So how can I stop the program in the debugger before loading the ntdll.dll? Ok, not before loading, but before executing any of DllMain functions and before initializing any of static objects.

解决方案

You can do this by adding a registry key to "Image File Execution Options" with the name of your exe. Add a value of type string named "Debugger" and set it to vsjitdebugger.exe to launch the just-in-time debugger dialog. Which then lets you pick one of the available debuggers, including Visual Studio. This dialog is triggered right after Windows has loaded the EXE, before any code starts running.

Here's is a sample .reg file that triggers the dialog when you start notepad.exe. Modify the key name to your .exe:

REGEDIT4

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options
otepad.exe]
"Debugger"="vsjitdebugger.exe"

这篇关于如何在程序执行的最开始设置断点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How do compilers treat variable length arrays(编译器如何处理变长数组)
Deduce template argument from std::function call signature(从 std::function 调用签名推导出模板参数)
check if member exists using enable_if(使用 enable_if 检查成员是否存在)
Standard Library Containers with additional optional template parameters?(具有附加可选模板参数的标准库容器?)
Uses of a C++ Arithmetic Promotion Header(C++ 算术提升标头的使用)
Parameter pack must be at the end of the parameter list... When and why?(参数包必须位于参数列表的末尾...何时以及为什么?)