【VS】Windbg的gflags.exe调试堆栈溢出,访问越界等问题。

【VS】Windbg的gflags.exe调试堆栈溢出,访问越界等问题。

gflags.exeWindbg下的一个小工具,非常好用,对于调试程序隐藏的bug很有帮助。现在 只要是VS2019以上的都会自带gflags.exe

:我在vs2019中遇到访问越界的问题,但程序不会在越界的地方发生崩溃中断,而是在一个不可能存在访问错误的地方发生了错误,以至于无法定位问题的位置。
 
  所以在网上看到了Windbg的方法,一开始对Windbg不是很了解,熟悉之后发现Windbg很强大,虽然只用到了其中的一个小工具gflags.exe

举个栗子:

int main()   
{    
    char *p = new char[10];  
    for(int i = 0; i != 11; ++i)     
        p[i] = i;    
    return 0;    
}

这是一个非常简单的越界程序,当i = 10时,访问越界了。但是如果不采用测试工具,这里是不会发生崩溃的。一般情况下,程序获取的空间是16字节对齐的,所以p[10]访问到的是对齐之后增加的空间,不会导致越界崩溃。但这是隐患,为了使隐患尽早被发现,使用工具是很好的选择。
  gflags用来跟踪这个程序的执行,可以设置每一次new分配的堆空间都单独的占有一块空间,并且这个空间相邻的位置被设置为不可访问的,一旦访问越界立即触发访问无效错误,尽早的触发崩溃。

gflags.exe的作用:跟踪被调试的程序

方法:

  1. 下载Debugging Tools for Windows或者使用VS自带的,使用其中的gflags.exe
  2. 双击打开gflags.exe,选择Image File标签。前两个标签是对所有程序进行跟踪。
  3. 在Image栏里输入你希望调试的程序名。比如,mytest.exe。(按Tab刷新)。
  4. 勾选Debugger并输入vsjitdebugger.exe
  5. 点击OK或者Apply。

注:用vc编译出release版本的可执行文件:mytest.exe。(注意:不是debug版本),gflags.exe工具跟踪被监控的程序一定要是release版本的,debug版本的跟踪的不会那么的准确。

在这里插入图片描述

这个时候,已经把要监控的test.exe注册上了。程序会中断到发生错误的地方,有源代码更好查看,本人就是在源代码下进行调试。

最后、问题解决了记得关闭gflags,因为开启gflags,调试运行就慢了,最后会影响到程序的性能,亲测性能下降非常严重。
关闭方法;

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/Image File Execution Options/mytest.exe

当然 也可以写一个小脚本。
例如:

@echo off

set KEY_NAME=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\UScanner.exe

reg delete "%KEY_NAME%" /f

echo 注册表项已删除。

网上看到是取消Debugger的勾选,但是无效,最后清除注册表后程序恢复原有速度。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Windbg 6.12.0002.633 是Microsoft官方提供的Windows调试工具。它是一种强大的调试器,用于分析和诊断Windows操作系统中发生的问题Windbg可以用于调试用户模式和内核模式的应用程序。 作为一种高级调试工具,Windbg提供了各种功能和命令,以帮助开发人员定位和修复软件中的bug。它可以在程序崩溃时捕获详细的调试信息,并分析导致崩溃的原因。通过使用Windbg,开发人员可以查看变量的值、调用栈、线程状态等信息,以便更好地理解程序的执行过程和内部结构。 除了基本的调试功能外,Windbg还提供了一些高级的功能,如内存分析、性能分析和追踪。开发人员可以使用Windbg来分析程序的内存使用情况,查找内存泄露和内存损坏问题。此外,Windbg还可以用于分析程序的性能瓶颈,帮助开发人员找到性能优化的方向。 总之,Windbg是一个强大的调试工具,可以帮助开发人员解决软件中出现的各种问题。通过使用Windbg,开发人员可以深入了解程序的内部机制,准确地定位问题,并快速地进行修复。 ### 回答2: Windbg6.12.0002.633是微软开发的一款调试工具,主要用于Windows操作系统的内核和应用程序的调试。它是Windows驱动程序开发和崩溃分析领域最受欢迎的调试工具之一。 Windbg6.12.0002.633具有强大的调试功能和丰富的调试命令,能够提供全面的调试信息和分析能力。它可以与符号服务器和调试扩展进行集成,以便更好地支持各种调试场景。 Windbg6.12.0002.633通过分析可执行文件的运行状态,可以帮助开发人员快速定位和解决程序中的bug和崩溃问题。它可以提供堆栈跟踪信息,显示线程状态和资源使用情况,查看内存中的变量和对象等等。开发人员可以通过这些信息提高调试效率,加快问题解决的速度。 此外,Windbg6.12.0002.633还拥有强大的内核调试功能,可以用于分析Windows内核驱动程序的运行情况。它可以与微软内核模式调试器KD一起使用,提供对内核服务、驱动程序和操作系统的完全访问权,使开发人员可以深入了解和调试系统的内部工作原理。 总之,Windbg6.12.0002.633是一款功能强大的调试工具,对于开发人员来说是一个宝贵的资源。它可以帮助开发人员提高调试效率,解决程序中的问题,提升软件质量。 ### 回答3: Windbg 6.12.0002.633是一款由微软提供的高级调试工具。它是一种非常强大而且灵活的工具,广泛应用于Windows操作系统的开发与调试过程中。 首先,Windbg 6.12.0002.633可以用于对应用程序、驱动程序或操作系统进行调试。它提供了各种功能来帮助开发人员分析应用程序或系统在运行时的问题。通过Windbg,开发人员可以查看具体的错误信息,堆栈跟踪,寄存器状态等,以便更好地理解代码执行时的情况。 其次,Windbg 6.12.0002.633还支持远程调试功能。这意味着开发人员可以通过网络连接到远程计算机并进行调试。这对于调试在远程服务器上运行的应用程序或系统特别有用。远程调试功能使得开发人员可以在实际环境中进行调试,从而更好地解决问题。 此外,Windbg 6.12.0002.633还内置了一些实用的调试命令。这些命令可以用于查看和修改内存,设置断点,单步执行代码等。这些命令的强大功能可以帮助开发人员快速定位并解决问题。 总之,Windbg 6.12.0002.633是一款功能强大且灵活的调试工具,它可以帮助开发人员解决应用程序或系统中的问题。无论是本地调试还是远程调试Windbg都能提供全面的支持,并以其丰富的功能和实用的命令帮助开发人员更好地理解和解决问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值