您曾经历过的最具挑战性的开发环境是什么?您采取了哪些措施来克服这些限制?

时间:2009-03-29 16:21:03

标签: debugging development-environment

通过'挑战发展环境',我并不是说你在一艘上下摇摆的小船上,有人拿着枪对着你的脑袋。我的意思是,您可以使用哪些工具来解决问题?

开发通常是代码循环,运行,观察结果,重复。在某些环境中,这是一个非常快速且无痛的过程,但在其他环境中,这非常困难。我们最终使用一些小技巧来帮助我们观察结果并更快地运行代码。

我正在考虑这个因为我刚开始使用SSIS(SQL Server 2005/8附带的ETL工具)。对我来说,取得进展是一项非常具有挑战性的事情,主要是因为没有指导所有对话的意思,也因为错误非常神秘,而且大部分时间并没有真正告诉你问题是什么。

我认为我必须使用的最简单的环境是VB6,因为您可以在应用程序运行时编辑代码,并且它将继续运行您的新代码!你甚至不必再运行它。这可以为您节省大量时间。令人惊讶的是,在使用Java代码的Netbeans中,您也可以这样做。它退出方法并使用新代码重新运行该方法。

在SQL Server 2000中,当触发器中出现错误时,您将无法获得堆栈跟踪,这可能会使找到问题的位置变得非常棘手,因为插入可能具有级联效果并触发许多触发器。在Oracle中,您可以获得一个非常漂亮的小堆栈跟踪,其中包含行号,因此解决问题非常容易。

我看到的一些事情确实有助于找到问题:

  1. 出现问题时的错误消息。
  2. 发生问题时提供堆栈跟踪。
  3. 您可以暂停的调试环境,然后输出变量值并按步骤执行。
  4. 图形调试环境,显示正在运行的代码。
  5. 一个屏幕,可以显示变量的当前值,以便您可以打印它们。
  6. 能够打开生产系统上的调试日志记录。
  7. 你看到的最糟糕的是什么以及如何解决这些限制?

    修改

    我真的不打算将它作为火焰诱饵。我真的只是在寻找改进系统的想法,这样如果我正在创造一些东西,我会考虑这些事情而不会导致人们的问题。我也在寻找创造性的方法来解决这些限制,如果我发现自己处于这个位置,我可以使用。

8 个答案:

答案 0 :(得分:3)

我正在努力为客户修改Magento。关于Magento系统如何组织的信息非常少。有数百个文件夹和文件,并且至少有一千个视图文件。 Magento论坛几乎没有提供支持,我怀疑这种缺乏信息的主要原因是因为Magento的创建者希望你付钱让他们成为Magento认证的开发者。此外,去年那个时候没有StackOverflow:)

我的第一个任务是弄清楚数据库架构是如何工作的,以及哪个表存储了我正在寻找的一些属性。 Magento有超过300个表,我无法找到SQL查询是如何完成的。所以我只有一个选择......

  • 我使用PhpMyAdmin将整个数据库(300多个表,至少20,000行SQL代码)导出到.sql文件中,并且我将此文件“提交”到subversion存储库中。然后,我使用Magento管理面板对数据库进行了一些更改,并重新加载.sql文件。然后,我使用TortioseSvn运行DIFF,并滚动浏览20k +行文件以查找哪些行已更改,LOL。听起来很疯狂,它确实有效,我能够找出我需要访问的表格。

  • 我的第二个问题是,由于疯狂的目录结构,我不得不同时ftp到大约3个文件夹进行微不足道的更改。所以我必须打开我的ftp程序的3个窗口,每次都在它们和ftp之间切换。

  • 第三个问题是弄清楚网址映射是如何工作的,以及我想要的一些代码存储在哪里。纯粹的运气,我设法找到了我正在寻找的Model类。

主要是通过纯粹的运气和其他类似的疯狂冒险,我设法完成了我的工作并完成了项目。从那以后,StackOverflow开始了,并通过对this bounty question的有用回答,我终于得到了关于Magento的足够信息,我可以用一种不那么疯狂的方式做未来的项目(希望如此)。

答案 1 :(得分:2)

尝试在Fortran中使用IBM JCL(作业控制语言)进行密钥搜索,在数据中心窗口处进行密钥处理,第二天早上回来并获得一英寸厚的打印纸堆栈,其中包含十六进制转储您的崩溃以及帐户费用清单。

在你的指甲上长出头发。

我想这是对先前坐在控制台,切换开关和阅读灯光的方法的改进。

答案 2 :(得分:1)

Occam在400x晶片机网络上。因为只有一台可以输出到控制台调试的晶片机是一场噩梦。不得不在Sun网络上构建测试工具。

答案 3 :(得分:1)

我参加了一次课程,这是基于SICP,但是它是在Dylan而不是Scheme中教授的。实际上,它是旧的Dylan语法,前缀是基于Scheme的。但由于没有旧版Dylan的翻译,教授写了一个。在Java中。作为applet。这意味着它无法访问文件系统;您必须在单独的文本编辑器中编写所有代码,然后将其粘贴到Dylan解释器中。哦,当然没有调试设施。作为一个用Java编写的Dylan解释器,这是在2000年,它的速度非常慢。

打印语句调试,大量复制和粘贴,以及对解释器的大量诅咒都参与其中。

答案 4 :(得分:1)

早在90年代,我就开发了Clipper中的应用程序,这是一种可编辑的dBase语言。我不记得它是否带有调试器,我们经常使用名为'Mr Debug'的第三方调试器(真的!)。尽管Clipper速度很快,但我们的一些更密集的例程都是用C编写的。如果你向正确的神祈祷并说出必要的咒语,你可以使用Microsoft的CodeView调试器来调试C代码。但通常不会超过几分钟,因为程序通常不喜欢花费很多时间运行CodeView(通常是内存问题)。

我有一系列makefile开关,我用它们来截断我当时不需要调试的代码部分。我的调试环境非常稀疏,因此程序的可用内存尽可能多。我还认为我当时喝了很多......

答案 5 :(得分:1)

几年前,我改进了游戏复制保护。因为保护是用C或C ++编写的,所以它们很容易拆解并理解发生了什么。但在某些情况下,当复制保护绕过内核来混淆正在发生的事情时,它会变得毛茸茸。其中一些人也开始使用定制的虚拟机来解决问题。我花了好几个小时编写钩子和调试器来跟踪它们。环境确实提供了竞争和创新的思想。除了时间之外,我随心所欲。错误导致重新启动并且很少反馈出错。我在行动之前意识到通常是一个更好的解决方案。

今天我发布了调试器。如果问题出现在我看到的代码中,我发现使用详细日志记录最容易。 (有时错误是不了解接口/环境然后调试器是好的。)我也意识到时间是一个很好的。您需要有一个良好的工作环境,可以立即测试您的代码。如果编译器需要15秒,您的环境需要20秒才能更新,或者您的缓存需要5分钟才能清除,找到另一种方法来测试代码。进步使我保持积极性,没有良好的工作环境,我会感到无聊,生气和沮丧。

答案 6 :(得分:0)

最近记忆中最糟糕的是使用Dundas控件开发SSRS报告。我们在需要编码的网格上做了很多工作。痛苦是控件的笨拙,以及缺乏调试支持。

我从来没有克服这些限制,但只是通过它们。

答案 7 :(得分:0)

我的最后一份工作是Sitecore开发人员。如果错误仅发生在客户端的系统上,并且它们没有在系统上安装Visual Studio,远程调试关闭,并且问题只发生在生产服务器(而不是登台服务器)上,则修复错误会非常痛苦。 / p>