加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

Visual Studio高级调试技巧

发布时间:2016-10-30 08:22:12 所属栏目:教程 来源:站长网
导读:副标题#e# 1. 设置软件断点,运行到目标位置启动调试器 方法①:使用汇编指令(注:x64 c++不支持汇编) _asm int 3 方法②:编译器提供的方法 __debugbreak(); 方法③:使用windows API DebugBreak(); WerFault.exe进程(Windows Error Reporting)弹出Con

-->对应的配置内容如下:

;  std::string -- char
std::basic_string<char,*>{
    preview        ( #if(($e._Myres) < ($e._BUF_SIZE)) ( [$e._Bx._Buf,s]) #else ( [$e._Bx._Ptr,s]))
    stringview    ( #if(($e._Myres) < ($e._BUF_SIZE)) ( [$e._Bx._Buf,sb]) #else ( [$e._Bx._Ptr,sb]))
    children
    (
        #if(($e._Myres) < ($e._BUF_SIZE))
        (
            #([actual members]: [$e,!] , #array( expr: $e._Bx._Buf[$i], size: $e._Mysize))
        )
        #else
        (
            #([actual members]: [$e,!],  #array( expr: $e._Bx._Ptr[$i], size: $e._Mysize))
        )
    )
}
;------------------------------------------------------------------------------
;  std::vector
;------------------------------------------------------------------------------
std::vector<*>{
    children
    (
        #array
        (
            expr :        ($e._Myfirst)[$i],
            size :        $e._Mylast-$e._Myfirst
        )
    )
    preview
    (
        #(
            "[", $e._Mylast - $e._Myfirst , "](",
            #array
            (
                expr :    ($e._Myfirst)[$i],
                size :    $e._Mylast-$e._Myfirst
            ),
            ")"
        )
    )
}
;------------------------------------------------------------------------------
;  std::map
;------------------------------------------------------------------------------
std::map<*>{
    children
    (
        #tree
        (
            head : $e._Myhead->_Parent,
            skip : $e._Myhead,
            size : $e._Mysize,
            left : _Left,
            right : _Right
        ) : $e._Myval
    )
    preview
    (
        #(
            "[", $e._Mysize, "](",
            #tree
            (
                head : $e._Myhead->_Parent,
                skip : $e._Myhead,
                size : $e._Mysize,
                left : _Left,
                right : _Right
            ) : $e._Myval,
            ")"
        )
    )
}

 

(2) 自定义类MyArray

①原始显示结果:

Visual Studio高级调试技巧

②配置了autoexp.dat的显示结果:

Visual Studio高级调试技巧

-->对应的配置内容如下:

MyArray{
    preview
    (
        #(
            "[size is ", $c.m_nSize, "] m_pData is (",
            #array
            (
                expr: ($c.m_pData)[$i],
                size: $c.m_nSize
            ),
            ")..."
        )
    )
    stringview
    (
        #(
            "Hello MyArray!!!"
        )
    )
    children
    (
        #(  
            #array
            (
                expr: ($c.m_pData)[$i],
                size: $c.m_nSize
            )
        )
    )
}

注1:双引号中字符串不能含有冒号,如:"[size is "不能写成"size: "

注2:多个类型使用 | 进行连接。如:MyArray|ArrayEx

注3:preview、stringview及children。对于不需要的部分可以不用定义,且三个部分没有先后顺序之分。

注4:格式的定义的最外层用大括号{},其中的每个部分使用小括号()。

注5:格式定义出错时,运行VS会弹出提示窗口,对于格式配置错误的类型,在调试期间无法正常显示。

注6:最外层的左边的大括号{必须紧挨着最后一个类型名,否则无论后面的格式正确与否,都无法正常显示。

注7:符号;为行注释符。

注8:$c表示当前所定义数据结构的对象,#array表示用数组形式显示内容,$i表示数组中的每个元素的索引,$e表示数组中的每个元素的值

注9:array结构必须同时包含expr和size两个部分,缺少其中一个部分都将导致信息无法正确显示。

注10:可使用#switch、#if进行条件分支判断,要注意的是:#switch结构不能用于#array结构中,否则可能导致VS挂死。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读