• VC Debug 小技巧——伪符号


    我们在调用WINDOWS函数的时候,经常要在后面加一条GetLastError()来取得函数出错的错误码以及原因, 如果在调试的状态中,WINAPI出错了,那我们又要停下来,加一句GetLastError(),然后再跑。这样调试起来很不方便。其实我们可以使用VC里的一些固定符号来进行调试。

    下面说一下第一个@ERR,我们等函数执行完,并确定它出错了,那我们就可以在VC 的 WATCH窗口里加上@ERR,那我们就马上可以看到出错的错误码了。如果我们还想知道错误码的意思,那我们可以加上@ERR,hr,这样错误码和出错信息都清清楚楚的显示出来了。

    这个调试方法是不是很棒?其实这种伪符号还有一个用处,在我们调试的过程中,我们可以利用这些伪符号设置断点停止的条件。例如下面的两行代码:

     FILE *fp = fopen("c:a_file_that_does_not_exist.txt", "r");
     int nT = 123;

    我们把断点加在第二行上,然后按CTRL+B(或者ALT+F9或者Edit->Breakpoints),选中这个断点,然后点Condition,输入@ERR==2,按下 F5 来调试我们的程序,程序就会在@ERR为2的时候停在了断点上。如果我们不想它为2的时候停止,我们就输入@ERR!=2,爽吧,这种功能可以说有很多可应用的地方,具体就等各位去实战了。

    除了@ERR之外,还有很多伪符号,例如@TIB,这是取得线程ID的符号,这个符号在多线程程序调试中可以发挥很大的作用。当我们有一个函数是被多个线程调用的,那当我们在这个函数里设一个断点后,无论哪个线程调用这个函数,都会停止在这个断点上。这个时候,如果我们想知道是哪个线程调用了它,我们就可以在WATCH窗口里写下@TIB,就会看到类似于2147344384这种数字了。这个就是线程ID了(也可以是这种格式:0x7ffa6000),我们同样可以在断点管理的 Condition 那里写上@TIB==0x7ffa6000,这样在其他线程调用这个函数时候不会停止,只有ID为0x7ffa6000的线程调用了,才会停止。

    上面介绍了两个伪符号,其实还有很多,下面给出一个表格供各位参考:

    Complete list of pseudoregisters

    Pseudoregister

    Description

    @ERR

    Last error value; the same value returned by the GetLastError() API function

    @TIB

    Thread information block for the current thread; necessary because the debugger doesn't handle the "FS:0" format

    @CLK

    Undocumented clock register; usable only in the Watch window

    @EAX, @EBX, @ECX, @EDX, @ESI, @EDI, @EIP, @ESP, @EBP, @EFL

    Intel CPU registers

    @CS, @DS, @ES, @SS, @FS, @GS

    Intel CPU segment registers

    @ST0, @ST1, @ST2, @ST3, @ST4, @ST5, @ST6, @ST7

    Intel CPU floating-point registers

    [Table from "Debugging Applications" by John Robbins]

    本文章参考了Code project 的一篇:An introduction to debugging in MSVC++ using Pseudoregisters


    查看本文来源

  • 相关阅读:
    spark学习进度03(入门案例、sparkshell本地文件读取,hdfs读取、本地运行、提交运行)
    spark学习进度02(集群搭建——第一个案例)
    spark学习进度01(安装环境搭建集群搭建)
    03 | 系统设计目标(一):如何提升系统性能?
    02 | 架构分层:我们为什么一定要这么做?
    01 | 高并发系统:它的通用设计方法是什么?
    24 | MySQL是怎么保证主备一致的?
    23 | MySQL是怎么保证数据不丢的?
    20 | 幻读是什么,幻读有什么问题?
    哇呀呀呀
  • 原文地址:https://www.cnblogs.com/lidabo/p/2785022.html
Copyright © 2020-2023  润新知