浅谈如何使用visual studio监视窗口

浅谈如何使用visual studio监视窗口,第1张

最近在捣鼓个问题,好久都没出来,及其崩溃中请教了高手,结果直接利用断点监视,很快就摆平了。么办法,学习啊!fightting!对于初学者而言,很多人会忘记使用监听器这个好东西,每件事物都其自身存在的必携燃脊要性,相信微软花了这么大力气搞出来的东西不会对我们一点帮助都没有。当然如何使用还得看我们的实际情况。监视为查看和计算变量表达式提供了一个快捷的途径,还可以编辑监视中的变量的值。监视是无需先关掉它可以直接调试,默认监视对话关闭或者挂起,这点我不是很懂。在VS运行环境里,编写完一个程序运行后,默认的我们会在vs底部位置看到错误列表、局部变量以及监视1显示栏,也可以从“调试”菜单选择“监视”。注意,应该在中断模式下使用。“监视”对话框允许一次查看多个变量或表达式。可以在“监视”打开时执行其他 *** 作,如逐句通过代码。做为初学者,我们应该多利用监视窗口,查询我们所需的变量、对象及表达式,清楚它们是否存在,值为多少,查看它们所包含的方法及对象,这样对我们更好的调用这些变量、对象甚至于传递参数等能起到很大的帮助作用。以后多多注意!以下是msdn对系统监听器的阐述:学习~系统监视器主要用于跟踪资源的使用情况(如段族正在使用的缓冲区管理器页请求数),使您能够使用预定义的对象和计数器或用户定义的计数器来监视事件,从而监视服务器的性能与活动。系统监视器(Microsoft Windows NT 4.0 中的性能监辩渗视器)将收集计数和比率而不是与事件相关的数据(例如,内存使用量、活动的事务数、阻塞的锁数或 CPU 活动)。您可以在特定的计数器上设置阈值以生成要发送给 *** 作员的警告。系统监视器在 Microsoft Windows Server 和 Windows *** 作系统上运行。它可以从远程或本地监视 Windows NT 4.0 或更高版本上的 SQL Server 实例。SQL Server 事件探查器与系统监视器之间的主要差别在于 SQL Server 事件探查器用于监视数据库引擎事件,而系统监视器用于监视与服务器进程相关的资源使用情况。 提示:某些表达式有一些副作用:它们会更改变量的值,或者在执行时更改程序的状态。在“监视”对话框中计算表达式与在代码中执行表达式的效果相同。如果没有注意表达式的副作用,则它可能会产生意外的结果。在 Visual Studio 中,将光标放在变量上可以快速查看该变量的值。

在App类里面定义一个未处理异常的回调函数。例如:

static LONG ApplicationCrashHandler(EXCEPTION_POINTERS* pException)

然后在这个函数里面实现计算机重启的功能。代码你可以自己在网上查询。这里我把提权限和重启的参考代码附上:

   OSVERSIONINFO os

    os.dwOSVersionInfoSize = sizeof(OSVERSIONINFO)

    GetVersionEx(&os)

    if (VER_PLATFORM_WIN32_NT == os.dwPlatformId)

    {

        HANDLE handle

        TOKEN_PRIVILEGES tkp

        OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &handle)

        LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid)

        tkp.PrivilegeCount = 1

        tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED

        AdjustTokenPrivileges(handle, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0)

        if (GetLastError() != ERROR_SUCCESS)

        {

            MessageBox(NULL, TEXT("AdjustTokenPrivileges error"), TEXT("error"), MB_OK | MB_ICONERROR)

        }

    }

    ExitWindowsEx(EWX_REBOOT, 0)

在App类的InitInstance成员函数的前面加上下列语句:

SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)App)

这个函数的功能是在整个进程出现了未处理异常的时候,就会把他交给ApplicationCrashHandler来处理,这个函数里面我们是做了重启 *** 作缺枝衡,因而能达到程序崩溃后能重启计算机的目的。

上面是在目标进程中来实现程序崩溃后重启计算机的,不需要另外单独写一个监控程序。如果需要单独写监控程序来做一个守护伏做进程,可以用进程快照或者枚举进程来实现,这种做法缺点是用户更改了程序名就会出现问题,更好的做法是用内核对象来实现,在目标进程中申请一个内核对象,监控进程中打开这个内核对象,如果能打开就说明目标进程存在,否则表示不存在目标进程,就可以重启计搭让算机了。这种做法记得在程序异常的时候关闭内核对象,否则当程序崩溃的时候,d出了标准的异常对话框,内核对象的生存周期还在,就无法达到程序崩溃的时候重启计算机了。

vs只用过性能分析,一般态纳磨都用一个开源的监测类,茄樱叫做帆斗MemoryDiagnosticsHelper,现在nuget上也有了 http://nuget.org/packages/MemoryDiagnosticsHelper/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12498311.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存