【VS】Windbg的gflags.exe调试堆栈溢出,访问越界等问题。
创始人
2025-05-30 09:34:49

【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

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

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

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...