WinDbg 扩展 C++ dprintf 在函数退出之前不显示
WinDbg Extension C++ dprintf Doesn't Display Until Function Exits
在WinDbg扩展中使用时,是否有方法确保dprintf立即更新WinDbg控制台输出,而不是等到函数结束?
的文档中似乎没有涵盖这一点
示例代码
DECLARE_API(myextension)
{
dprintf("Print some textrn");
Sleep(5000);
}
如果在WinDbg中,我加载此扩展并执行它
!myextension
文本打印到控制台之前有5秒的延迟-我如何确保此文本立即显示。
在实际的解决方案中,我有一个长时间运行的任务,希望在任务运行时继续输出;然而,我也可以通过睡眠来重现这个问题。
wdbgexts样式的扩展是旧的,并且有一些限制
您应该尝试编写engextcpp样式的扩展
或至少dbgeng风格的扩展
这是一个dbgeng风格的样本
#include <windows.h>
#include <dbgeng.h>
PDEBUG_CLIENT2 g_Client = NULL;
PDEBUG_CONTROL2 g_Control = NULL;
HRESULT CALLBACK DebugExtensionInitialize(PULONG Version, PULONG Flags)
{
*Version = DEBUG_EXTENSION_VERSION(1, 0);
*Flags = 0;
DebugCreate(__uuidof(IDebugClient2),(void **)&g_Client);
return g_Client->QueryInterface(__uuidof(IDebugControl2),(void **)&g_Control);
}
HRESULT CALLBACK testsleep(PDEBUG_CLIENT , PCSTR )
{
ULONG now = 0;
g_Control->GetCurrentSystemUpTime(&now);
g_Control->Output(DEBUG_OUTPUT_NORMAL,"sleep %x or %d now at %dn",5000,5000,now);
Sleep(5000);
g_Control->GetCurrentSystemUpTime(&now);
g_Control->Output(DEBUG_OUTPUT_NORMAL,"woke %x or %d now at %dn",5000,5000,now);
return S_OK;
}
跑步的结果!windbg 中的testsleep
0:000> .time
....
System Uptime: 0 days 12:50:30.766
.....
0:000> !testsleep
sleep 1388 or 5000 now at 46235
woke 1388 or 5000 now at 46240
0:000> .formats 0n12*0n3600+0n50*0n60+0n30
.....
Decimal: 46230
engextcpp样式扩展的示例neat an clean甚至不必包括windows.h
#include <engextcpp.hpp>
class EXT_CLASS : public ExtExtension {
public:
EXT_COMMAND_METHOD(testsleep);
};
EXT_DECLARE_GLOBALS();
EXT_COMMAND(testsleep,"","")
{
ULONG now =0;
m_Control2->GetCurrentSystemUpTime(&now);
Out("Sleeping for 5000 milliseconds from %dn",now);
Sleep(5000);
m_Control2->GetCurrentSystemUpTime(&now);
Out("Slept for 5000 milliseconds upto %dn",now);
}
逃跑!测试睡眠
0:000> !testsleep
Sleeping for 5000 milliseconds from 48921
Slept for 5000 milliseconds upto 48926
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何让LLDB在成功时退出,在失败时等待
- C++控制台应用程序阻止退出
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 程序在执行程序的其余部分之前退出
- 程序显示以退出代码 0; 结束
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- Gtk::在将我的gtkmm2移植到gtkmm3应用程序时,窗口显示并退出
- QT/C++,OS X:退出应用程序时可选择隐藏(),以便应用程序继续运行,并在单击dock中的图标后再次显示
- 是否可以进行编译,以使错误的std::vector访问调用退出程序,并显示有用的错误消息
- WinDbg 扩展 C++ dprintf 在函数退出之前不显示
- MPI 警告:程序退出并显示未完成的接收请求