zoukankan      html  css  js  c++  java
  • VC调试笔记

    1、windows-32调试
    ①使用map文件根据崩溃地址寻找对应的源代码文件和行号
    勾选project->settings->link->General mapfile,对应的Project Options中添加:/MAPINFO:LINES /MAPINFO:EXPORTS 。 在不使用优化且没有多dll引用导致的重定向时,崩溃地址寻找对应的代码行的方法:崩溃地址=装载机地址(0x10000000)+PE头文件大小(0x00001000)+RVA值,这个RVA值在生成的map文件中形如“
    Line numbers for .DebugKillerDLL.obj(C:UsersAdministratorDesktopWindowDebug2KillerDLLKillerDLL.cpp) segment .text


        13 0001:00000030    14 0001:00000048    15 0001:0000004d    19 0001:00000060
        21 0001:00000082    24 0001:000000a0    25 0001:000000b8    27 0001:000000c6
        29 0001:000000e4    30 0001:000000ec    33 0001:000000ee    34 0001:00000103
        37 0001:00000105    38 0001:0000010c    39 0001:00000116    43 0001:00000118
        44 0001:00000128    45 0001:0000012f    48 0001:00000138

    内冒号右边的值时,对应最左边的即为对应行号
    ②使用PDB文件找对应的源代码文件和行号
    打开反汇编窗口,Edit->goto->address即可找到对应的汇编代码,右键,goto source即可找到源文件和行号
    ③使用Dr.Watson调试:C:WindowsSystem32DRWATSON.EXE (未完)

    双击会在Windows目录生成drwatson.log文件,监控可能报错的程序


    2、使用VC的编辑继续调试
    1)调试版本->C/C++->General->Debug info里选择Program Database for Edit and Continue,同上,要保证所有的优化关掉
    2)link->Customize选择Link incrementally
    3)Debug->Debug commands invodke Edit and Continue
    配合使用set next statement功能:该命令通过修改指令指针寄存器(EIP)的值设置下一条将被执行的指令。它不修改堆栈,不执行任何代码、不创建或释放任何变量。
    使用限制:以下修改是调试期间不支持的:
    对资源文件的修改
    对只读文件里代码的修改
    对优化代码的修改
    对处理异常代码的修改
    对数据类型的修改,包括类、结构、联合以及枚举
    增加新的数据类型
    对函数原型的修改,包括函数名、参数、调用协议以及返回值
    函数的删除
    对全局或者静态代码的修改
    对不是局部编连的可执行文件的修改

    在活跃(active)函数里增加新的变量时,还有个总的变量长度不超过64字节的限制


    3、发布版本中包含调试代码,但是不希望影响程序的性能:
    if(IsDebuggerPresent())//如果调试器正在执行

    PerformTimeConsumingDebugCheck();//这函数的具体意思?


    4、使用键盘动态激活调试代码
    #ifdef _DEBUG
    //filter data only when the contorl key is pressed
    if(GetAsynKeyState(VK_CONTROL) < 0 && data[i].x != 42)
    continue;
    #endif

  • 相关阅读:
    中缀、后缀、前缀表达式
    Salesforce图片上传
    VSCode格式化Apex代码
    Reporting Services已有帐号出现无法登录的问题
    EF-查询缓存
    visual studio 2015将已有项目添加到码云(gitee)
    asp.net页面加载两次的坑
    EF的性能瓶颈
    微信JS-SDK上传多张照片
    Python20-Day02
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3304137.html
Copyright © 2011-2022 走看看