调试脚本将帮助你更有效地使用调试器

当我们调试一个较复杂问题时,比较难以定位问题,需要尝试多次设置断点,多次 continue,多次查看变 量值等,有时,需要设置一些特殊的调试变量等等。这个过程,往往需要多次重启调试器,也重新开始这些调 试命令。如果调试不支持反向调试,或是反向调试性能较差时,历史记录与调试脚本的配合使用将简化这样的 过程,下面以 zOS USS DBX 为例,我们一起来看看如何使用。同时,这样的调试脚本将有会成为自己或其他 初次使用 dbx 用户的参考。

当我们在调试一个较为复杂的问 题时,可能会比较难以定位,需要尝试多次的设置断点,多次的continue,多次的查看变量值等操作。有时, 还需要设置一些特殊的调试变量。这个过程往往需要多次重启调试器,一遍又一遍的执行这些调试命令。这时 ,如果调试器不支持反向调试,或是反向调试性能较差时,上面的过程就沦落为一系列繁琐,重复性的操作。 手酸了吧,敲累了吧,蒙圈了吧,下面给大家介绍一种利用历史记录与调试脚本相互配合的方法来解放我们可 怜的双手和大脑。以 zOS USS DBX 为例,我们一起来看看我们的操作将怎样得以简化。同时,这种方法对于 未来类似的调试工作或者初次使用 dbx 的用户也具有参考价值。

1. 我们以用dbx调试main程序为例进 行说明,下面列出的是调试过程,在此期间我们设置了断点和调试变量。在调试的最后,我们用 history 命 令得到所有执行的 dbx subcommands。注意咯,黄色的部分是我敲入的用于调试程序的dbx subcommand,其它 部分是dbx的输出。

dbx main

/u/chenxl/example-dbx >> dbx main          # 启动dbx调试main

(dbx64) stop in main                       # 在main()处设置断点

[1] stop in 'int main(int argc, unsigned char **argv)'

(dbx64) set $listwindow=20                  # 将默认显示行数10改为20

(dbx64) set $repeat         # 设置repeat,enter后,将重复上次的 dbx subcommand

(dbx64) set $catchbp=1      # 执行next/step过程,如果遇到断点,将触发断点,并停下来

(dbx64) run               # 设置好调试变量后,let’s go

[1] stopped in main at line 16 in file "main.c" ($t2)

16   int main(int argc, char *argv[])

(dbx64) list                               # 显示20行源码

  17   {

18      volatile int ti = 0;

19

20      if (argc > 2) {

21          x = atoi(argv[1]);

22          if (argc > 3) {

23              y= atoi(argv [2]);

24           }

25       }

26

27      ti = bbb();

28      for( ti = 0; ti < 50; ti++) {

29          aaa();

30       }

31      if (x == 4) {

32          y = bbb();

33       }

34       else {

35          y = ccc(x,y);

36       }

时间: 2024-10-04 18:45:44

调试脚本将帮助你更有效地使用调试器的相关文章

Console命令详解,让调试js代码变得更简单

Console命令详解,让调试js代码变得更简单 Firebug是网页开发的利器,能够极大地提升工作效率. 但是,它不太容易上手.我曾经翻译过一篇<Firebug入门指南>,介绍了一些基本用法.今天,继续介绍它的高级用法. =================================== Firebug控制台详解 作者:阮一峰 出处:http://www.ruanyifeng.com/blog/2011/03/firebug_console_tutorial.html 控制台(Conso

比LastPass、1Password更安全的密码管理器,Horcrux是怎么实现的?

本文讲的是比LastPass.1Password更安全的密码管理器,Horcrux是怎么实现的?, 弗吉尼亚大学的两位研究人员设计了一款新的密码管理器Horcrux,和现有密码管理器机制很是不同. 研究人员称Horcrux是密码管理器产品里的"偏执狂",因为它在安全.隐私以及处理用户密码上有独特的设计,相比LastPass和1Password等主流密码管理器要更可靠. 它们之间有两个主要区别. 虚拟表单 第一个是在网页插入用户账号密码的方式,现在的密码管理器都是直接填写. "

c++-vs2013工程前后两个版本,前面版本调试正确,后面版本把新增代码注释调试错误?

问题描述 vs2013工程前后两个版本,前面版本调试正确,后面版本把新增代码注释调试错误? 这是后面版本报错地方,servprov.h是外部依赖项里面的一个头文件,把新增部分相关的全部注释掉调试也会出现这些报错,好奇怪,编译器有毒? 求解决 解决方案 我也遇到过这个情况,后来无赖只好换回以前的版本 解决方案二: 重定义,说明外部使用.与你增加的部分冲突了 换回以前的版本呢,如果能编译通过,则说明还是你修改的地方出现了问题,再仔细的查查吧. 解决方案三: 这个库本身是否用vs2013编译的,可能是

对于调试ffmpeg源代码,大家都用什么软件调试

问题描述 对于调试ffmpeg源代码,大家都用什么软件调试 我用的是codeblocks,可以编译ffmpeg,也可以进行debug调试,但是执行到断点,接着下一步调试时位置不正确,而且用step into进入一个函数时,它不是跳到本文件的函数 解决方案 ffmpeg是C++写的,那么用vc++或者devc++,linux下用codeblock.执行断点不对可能是你的调试符号和源代码不一致,你可以全部重新生成下.

托管更方便 高性价比机架式服务器导购

前 几天我们曾今向大家推荐了几款经济实用的 塔式服务器(经济实用 小企业适用塔式服务器导购),对于一些预算有限的小企业用户来说,它们的性能够用,售价适中,的确是不错的选择. 但是塔式服务器也有自己的不足,那就是体积较大,这也决定了其不太适合托管,而对于一些互联网服务 提供商来说,托管 往往是他们的 最好选择.好在现在随着技术的进步,体积小巧.更适合托管的 机架式服务器的价格也已经大幅降低,绝大多数用户也可以 轻松承担,于是,我们今天就为大家选择了几款1U机架式服务器,它们的特点就在于保留经济实用

Javascript调试脚本的经验之谈第1/2页_javascript技巧

编程实际上是一种能随着时间不断飞快进步的技术.但是不管变得多么熟练,你仍然要花一些时间调试你的代码.如果你做过家庭作业,或有过JacaScript编程经验,你会知道相当多的时间是花在调试上.这很正常 - 这只是编程者必须做的事之一.实际上,按照大量的研究,程序员平均百分之五十的时间花在解决代码中的错误. 关键是学会怎样有效地调试你的程序.我有一些技巧可以帮助你解决程序为什么没有象应该的那样运行,或者帮你首先避免写有很多错误的代码: 1.用不同方式打印出变量 2.注意一般性错误 3.编码之前先想好

客户端脚本中常常出现的一些问题和调试技巧_基础知识

1.出错情况:语法错误 <div id=div1></div> <script language="javascript"> document.write("never-online"; </script> 解释:上面的示例是一个典型例子,方法名都要用()括起来()里的是参数. 也许有人不屑一顾,但在论坛中.这种错误不在少数. Tips:这种问题解决起来比较简单,一般都可以解决. 2.出错情况:引号用法不正确 <

html代码调试脚本_javascript技巧

        提示:你可以先修改部分代码再运行

直接调试就可以正常运行,但是直接运行(不调试)就会出现错误

问题描述 我点击调试按钮程序却可以正常运行,但是点击开始执行(不调试)却出现下面的错误今天我在运行C#程序时,遇到了:值不能为空,参数名:path的错误详细信息是:System.ArgumentNullException:值不能为空.参数名:path在System.IO.StreamWriter..ctor(Stringpath,Booleanappend,Encodingencoding,Int32bufferSize)在System.IO.StreamWriter..ctor(Stringp