Questions tagged «debugging»

调试是在程序运行时检查程序状态的过程,通常使用调试工具进行检查,并尝试查找导致程序异常运行的错误。

10
在用尽所有途径修复错误后该怎么办
我是一名初级程序员(到目前为止有4个月的职业经验)正在跨平台移动应用程序上工作(一个人的团队,所以这只是我自己)。 我在此程序/应用程序中存在一个错误,该错误很大(30个不同的头文件,每个头文件也都有自己的cpp文件)。我一直在试图确切地找到错误的根源并进行修复(甚至尝试使用一些hacks使其正常工作),但是有大约十几种或更多种解决方案(我知道导致问题的原因)我什么都没提出来,导致我无法准确跟踪错误或修复了错误。 您是否对使用一些广泛技术的初级程序员有任何建议(可以运行,将我的所有代码打印到纸上并用笔通过它,等等),我可以用来协助解决此错误吗? 为我的错误提供更多背景信息;它涉及跨平台API Mosync,当我执行特定的操作序列时,当前屏幕不会重绘(并显示)以前显示的屏幕仍在接收指针/按键事件,而不是当前屏幕。 具体顺序: -显示菜单屏幕-单击“显示上一个订单按钮” -显示前一个订单屏幕-单击“加载文件”,然后单击菜单按钮并打开交货屏幕 -显示交货屏幕-单击菜单按钮并打开采购屏幕 -显示采购屏幕-此处错误,未显示/未响应此屏幕的输入,ListViews不滚动,按钮不响应点击,ListView单元格不响应点击 我会接受建议,每次执行相同的步骤时,该错误都是100%可重现的,尽管由于我无法理解API的一部分,仍然很难弄清指针事件是如何传输的以及显示在什么屏幕上达到(或不知道如何)。 另外,我也希望在我的工作中拥有另一双眼睛,并指出错误,但是正如我所说的那样,我是一个由1人组成的团队,我的老板指导我,他拥有公司,并且对应用程序有想法,但是不知道c ++或任何最近的语言(cobal?我想是全部)。关于如何在不违反/不炫耀公司知识产权代码/财产的情况下获得第二只眼睛的任何建议? ...而且不离开这个有薪实习是不可行的,合同说如果我在1200万合同的6个月之前离开,我可能有责任支付我年薪的30%

3
是否有任何有关“一般”调试的理论或书籍?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 我阅读和学习了许多计算机科学和工程学,很少或从未见过有关调试的书或有关如何调试的理论(尽管我肯定开发了一些自己的调试理论)。 是否有任何调试理论和/或书籍?为什么/为什么不呢?我可以阅读如何使用gdb进行调试,以及通过阅读如何使用gdb获得的有关开发的一些最有用的信息。
12 debugging 

6
调试:了解有关某些修复程序为何起作用的详细信息?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 调试时,有时会发现我做了一些更改,但我不是100%知道为什么这些更改可以纠正程序中的某些错误。是否必须了解有关为什么会出现某些错误以及为什么某些更改会消除这些错误的每个细节?还是在开发人员中有时不真正知道有关修复程序为何起作用的细节而使程序正常工作,这是常见的吗?
12 skills  debugging  bug 

7
为什么学校不提供调试器?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 关于SO的另一个作业问题。似乎绝大多数学生都不知道调试器是什么或如何使用调试器。我觉得知道如何使用调试器与编程的其他基础几乎一样重要。 问题是不应该进行调试吗?如何在编程基础知识的基础上教授现代调试工具的使用方法?如果不是,为什么不呢。

5
您如何调试二进制格式?
我希望能够调试构建二进制生成器。现在,我基本上是将输入数据输出到二进制解析器,然后深入代码并打印输入到输出的映射,然后获取输出映射(整数)并使用它来定位对应的整数在二进制文件中。非常笨拙,并且需要我对源代码进行深度修改才能获得输入和输出之间的映射。 似乎您可以查看不同变体形式的二进制文件(在我的情况下,我想以十进制数字形式以8位块形式查看二进制文件,因为它非常接近输入内容)。实际上,有些数字是16位,有些是8位,有些是32位,等等。因此,也许会有一种查看二进制文件的方式,这些内存中的每个不同数字都以某种方式突出显示。 我看到的唯一可能的方法是,如果您实际上构建了特定于实际二进制格式/布局的可视化工具。因此,它知道序列中的32位数字应位于何处,以及8位数字应位于何处,等等。在某些情况下,这是很多工作并且有些棘手。所以想知道是否有通用的方法可以做到这一点。 我也想知道目前调试这种类型的东西的一般方法是什么,所以也许我可以从中得到一些尝试的想法。
11 debugging  binary 

5
学习调查错误[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我什至不知道如何定义这个困难。这让我想起了几位准员工在我找到工作之前对我进行的测试。他们会在房间里拿一个物体,然后允许我提出问题以帮助自己确定该物体是什么(很像20个问题)。我非常擅长此事(不,我从来没有因为谦卑而获得高分),所以我以为我会非常擅长解决错误... 但是这是我最近发现的东西。在那种情况下,我真的很擅长,因为很容易看到房间里的所有东西,因此我可以用一些组成部分的概念来解决我的问题。本质上,我“知道我不知道的事”。但是在编程时,我遇到了很多情况,而这个问题对我来说是完全未知的。我知道它已损坏,但是我不知道它可能如何损坏。我遵循了所有说明,我对这项技术相当了解... 老实说,我觉得我很难想象可能出错的事情,因此我可以对其进行测试,并希望找到解决方案。 我该如何发展这项技能?我需要做些什么来帮助我有限的想象力提出可能破坏我的项目的方式?是否有一些练习(也许令人困惑?)可以使我对此有所改善?我知道最大的治愈方法可能只是经验...但是,我希望能帮助加快这一过程。一次呆呆地盯着我的电脑屏幕看几个小时甚至都不是一件有趣的事...


5
信息很少的调试提示?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我继承了一个具有相当大代码库的项目,而最初的开发人员很少(如果有的话)回复电子邮件。有很多不同的方法可以执行其中的某些操作,但我并不全都知道。这些路径上有很多重复的代码(而不是5个页面所包含的功能做的是相同的事情,而是5个页面中复制的代码),以及数据库中的一些细微问题(我们都听说过意大利面条式代码) ,但您有没有听说过意大利面条数据库?) 所有这些我大部分时间都可以处理,没有问题。 问题是客户在某处发现错误时。他们通常会发送最终问题的屏幕截图,然后说:“您能看看这个吗?” 同时在页面上突出显示错误的特定内容,有时甚至是预期的内容。给出的信息很少,而尝试与他们交谈并获得更多信息(例如他们为获得结果所做的事情)就像在咬牙。 基本上,可以归结为: 我不是100%熟悉的大型复杂代码库 事情可能会出错 关于如何产生错误的信息很少 有人对如何调试这类东西有任何提示,技巧,建议等吗?
11 debugging 

8
如何在不向竞争对手公开秘密的情况下安全地调试PHP Web应用程序?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 最近我做了一个程序。我忘记删除2行代码。这个错误每天使我每天损失$ 800。 我当时在用PHP编程。如果访问者使用代理,它将重定向到其他地方。使用调试器是不可能的,因为某些代码包含ioncube。由于该程序无论如何都只是重定向到其他地方,因此很难看到代码的哪一部分被执行。 所以我到处都放了一堆调试信息。我以为我以后还是要删除它们。 当然,最自然的调试方法是将调试信息放入文件中。问题是我经常使用代理。因此,在更改程序后,我经常必须使用filezilla下载文本文件。通常,文本文件没有显示我认为应该显示的内容。最后,我决定只在网络上显示错误。 我考虑过使用调试模式。但是,恐怕我会忘记删除调试信息。 例如,如果用户执行?debuggingmode = 1,我考虑使用调试模式。但是,我对自己的竞争对手以某种方式可以猜出secret关键字感到疑惑。 我删除了大多数调试信息。我忘记删除一个,并且只有在用户使用来自正确国家/地区的代理服务器时才会显示一个。原来我没有来自正确国家/地区的代理,也没有意识到这一点。该程序运行24小时后,我将其上传到了我的主域。 我的竞争对手,使用代理,请参阅调试代码。他抄袭了这个主意,这就是我每天损失800美元的原因。 回想起来,我真的很难知道我哪里出了问题。我一直非常小心。却发生了。 如何在不向竞争对手公开秘密的情况下安全地调试PHP Web应用程序?
11 php  debugging 

11
调试和测试有什么区别?
软件测试简介(Ammann和Offutt)在第32页中提到了5级测试成熟度模型: 级别0测试和调试之间没有区别。 1级测试的目的是证明该软件可以正常工作。 2级测试的目的是证明该软件无法正常工作。 3级测试的目的不是证明任何特定的东西,而是降低使用该软件的风险。 4级测试是一门精神学科,可帮助所有IT专业人员开发更高质量的软件。 尽管它们没有进一步详细介绍。调试和测试之间有什么区别?

3
打印到控制台/标准输出是一种好的调试策略吗?
假设我们有一个像这样的函数: public void myStart() { for (int i = 0; i<10; i++) myFunction(i); } private int myFunction(int a) { a = foo(a); a = bar(a); return a; } private int foo(int a) { //do something here //something gnarly here //etc return aValue; } private int bar(int a) { // do …
11 debugging 

13
我们可以保证程序永远不会出错吗?
我们在这里有一个系统。最近,系统生成的报告中的数字之一计算错误。根据我们的经验,多年来,我们从未在该系统中遇到任何问题/错误。 由于该系统的编写者已经离开,因此我们几乎无法跟踪程序。但是我们已经验证了输入数据,设置及其正确性。 现在我的问题是,计算机程序会在没有任何逻辑原因的情况下突然出错吗?如果我猛击服务器计算机,计算机正在计算的数字之一会变成另一个数字并使计算错误吗? 我同意我的想法很疯狂,但是我只想知道,我们怎么知道问题不是由程序和输入引起的,而是其他一些因素引起的? PS这个疯狂的系统没有日志。
10 debugging 

7
我可以采取什么方法来降低在复杂的旧版应用程序中引入新错误的几率?
在我工作的地方,我经常不得不在旧系统(.NET 1)中开发(和修复错误)谁的代码是完整的意大利面条-对变量名,程序结构或注释不加考虑。 因此,我花了很长时间才了解需要更改哪些位,并且由于进行了修改,我经常“破坏”现有软件。我真的真的想花几个月的时间(与同事),通过它去重构,但现有的开发人员都看不到需要-也不觉得孤单时间讨论这个(系统是巨大的)。 我担心必须处理它的代码,因为花几天的时间来修复某些问题,才发现我已经破坏了其他内容。这显然使我看起来不称职-那么我该如何处理呢?

5
服务器终止时正确处置对象
我正在从事大型C ++项目。它由公开REST API的服务器组成,为包含许多其他服务器的非常广泛的系统提供了一个简单且用户友好的界面。该代码库很大且很复杂,并且随着时间的流逝而没有适当的设计前期。我的任务是实现新功能并重构/修复旧代码,以使其更稳定,更可靠。 目前,服务器创建了多个长寿命对象,这些对象在进程终止时不会终止或处置。这使得Valgrind几乎无法用于泄漏检测,因为不可能区分成千上万(合法地)合法泄漏与“危险”泄漏。 我的想法是确保在终止之前将所有对象都处置掉,但是当我提出此建议时,我的同事和老板反对我指出操作系统将以任何方式释放内存(这对每个人都是显而易见的)并处置对象将减慢服务器的关闭速度(目前基本上是对的调用std::exit)。我回答说,拥有一个“干净的”关闭程序并不一定意味着必须使用它。如果我们感到不耐烦,我们可以随时致电,也可以std::quick_exit只是kill -9这个过程。 他们回答说:“大多数Linux守护程序和进程都不会在关闭时释放内存”。虽然我可以看到,但确实我们的项目确实需要准确的内存调试,因为我已经发现内存损坏,双重释放和未初始化的变量。 你怎么看?我在追求无意义的努力吗?如果没有,我该如何说服我的同事和老板?如果是这样,为什么,我应该怎么做?
9 c++  debugging  memory 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.