MSVC的调试技巧: Pseudoregisters
来源:互联网 发布:淘宝网账户冻结 编辑:程序博客网 时间:2024/04/29 02:33
转自http://blog.csdn.net/chinacodec/archive/2009/01/26/3853469.aspx
“pseudoregister”并不是一个真正的硬件寄存器. 利用pseudoregister可以查看并且使用调试器当中的特定值(错误代码, 线程信息块, …). 让我们看看@ERR. 启动一个调试应用程序. 在你的代码放置断点便于调试器中断执行. 打开Watch窗口, 添加@ERR到窗口. 你可以在值列看到值为零. 现在可以调试你的代码并且查看数值. @ERR总是显示当前线程的GetLastError()数值. 当执行发生错误的时候, 数值就会改变了. 要测试, 写下如下导致错误的代码: FILE *fp = fopen("c://a_file_that_does_not_exist.txt", "r"); 步入上述代码行的时候, @ERR数值修改成为2. 利用Tools->Error Lookup 可以查看对应的错误代码解释为 ("The system cannot find the file specified"). 如果添加”,hr”, 错误信息就会显示出来, 不用”Error Lookup”工具了(译者: 一般”err, hr”也是一样的) 条件表达式 Pseudoregisters也可以被使用在条件表达式当中, 添加如下代码行到fopen: if (fp) { fclose(fp); } 在"if (fp)"添加断点. 利用Edit->Breakpoints (Alt-F9)添加条件”@ERR==2”. 启动调试以后, 在fopen() 文件不存在的时候进入断点. 如果文件存在断点不会触发, 即使在触发其他错误的时候也是如此(例如4: 无法打开指定文件). @TIB pseudoregister @ERR不是唯一的调试寄存器. 另一个重要的寄存器是@TIB. 这是当前线程的信息并且对于多线程调试非常有用. 如果你在多线程调用的函数当中添加断点, 调试器在不管什么线程调用的时候总是触发断点. 即使你步出代码也会进入另一个线程调用(断点). 要解决这个问题, 你需要进行以下错误. 如果要触发指定线程的断点, 添加@TIB寄存器. 你会看到诸如"0x7ffa6000"或者"2147115008"的寄存器值. 编辑断点条件, 设置条件@TIB==0x7ffa6000. 这样, 调试器仅仅会在指定线程触发. 其他调用同一个函数的线程不会触发. 不过这对于Win98不适用. 对于Windows 98, 需要利用Intel CPU的寄存器@FS==value 完整的寄存器列表: Pseudoregister Description @ERR 最后错误值; 和GetLastError() API 函数一致 @TIB 当前线程信息; 在调试器无法处理”FS:0”格式的时候是必要的 @CLK 未列入文档的寄存器; 只是在Watch窗口适用 @EAX, @EBX, @ECX, @EDX, @ESI, @EDI, @EIP, @ESP, @EBP, @EFL Intel CPU 寄存器 @CS, @DS, @ES, @SS, @FS, @GS Intel CPU 段寄存器 @ST0, @ST1, @ST2, @ST3, @ST4, @ST5, @ST6, @ST7 Intel CPU 浮点寄存器
- MSVC的调试技巧: Pseudoregisters
- MSVC的调试技巧: Pseudoregisters
- MSVC的调试技巧: Pseudoregisters
- [debug]MSVC的调试技巧: Pseudoregisters
- [zt]MSVC的调试技巧: Pseudoregisters
- [调试技巧3]MSVC的调试技巧: Pseudoregisters
- 使用伪寄存器调试MSVC++程序的介绍--An introduction to debugging in MSVC++ using Pseudoregisters
- Use Pseudoregisters to debug in MSVC++
- An introduction to debugging in MSVC++ using Pseudoregisters(转自codeproject)
- Qt Creator 配置Msvc 2012的调试器
- Qt Creator 配置Msvc 2012的调试器
- Qt Creator 配置Msvc 2012的调试器
- Qt Creator 配置MSVC 2010的调试器
- Qt Creator 配置Msvc 2012的调试器
- Qt Creator 配置Msvc 2012的调试器
- MSVC的编译链接
- Eclipse 调试的技巧
- 调试代码的技巧
- Struts 2 :使用List同时上传多个文件异常
- C# 查看端口是否被占用
- Ubuntu下安装Mysql5 -- 二进制tar包安装
- 第2 章 SQL 问题
- C# 调用其它程序 Process.Start 方法说明
- MSVC的调试技巧: Pseudoregisters
- 【Unix】进程控制
- 重新理解点小知识
- linux 正则表达式学习2
- Ubuntu如何管理启动服务
- 怎样把一段二进制编译到mtk的bin里面去
- 采访分布式数据访问层(Data Access Layer)
- 快速配置ZendFramwork
- zz bpf过滤规则