我刚开始使用Xcode中的Cocoa开发,做了hello world示例.我要完成" 运行时调试 " 部分的第6步,即
使用调试器工具栏中的"跳过"按钮,开始逐步执行代码.当每行代码执行时,您可以检查程序的状态.变量的值有时以红色绘制,表示该值在最后一步中被修改.请注意,调试器在执行指示的行之前暂停.每次暂停后,您可以添加其他断点或选择"调试">"重新启动"以终止应用程序并启动新的调试会话.
现在我在过去一小时里把头发拉出来的事实是这个调试器只显示汇编代码.我可以手动选择我的源代码文件,但是一旦我点击"Step over",我就会立即回到汇编视图中.我不能为我的生活弄清楚如何关闭汇编程序,并让它显示我的源代码!
我以前的相关问题是逆向工程旧油漆程序
我在这里建立了我的运营基地:http://animatorpro.org wiki即将推出.
好的,现在我有300,000行传统的MSDOS代码库.这有点"小心你想要的"情况.我不是一位经验丰富的C程序员.我也不是完全缺乏经验,但出于所有意图和目的,我对语言是一个菜鸟,特别是它的图书馆的复杂性.我特别不了解专门为MSDOS编写的C程序与跨平台程序之间差异的变幻莫测.但是我已经研究了这个代码库超过一年了,这就是我对Animator Pro的了解:
使用的编译器和工具:
大部分编译似乎都是由批处理文件驱动的.虽然我已经获得了所有这些工具的副本,但我还没有成功编译它.(虽然我编译了它的哥哥,autodesk animator original.
它有一个插件系统,可以在DLL可用之前复制DLL,基于REX.插件系统处理:
它有自己的脚本解释器,名为POCO,基于C语言 - 脚本语言有足够的能力来完成插件系统可以做的几乎所有事情 - 只是更慢.
鉴于此信息,这是我的发展计划.请批评这个.源代码可在上面的链接中找到,因此如果您愿意,可以轻松地自己评估情况.
任何人都有问题吗?allegro是个不错的选择吗?如果没有,为什么?你会对这个插件系统做些什么?你会做什么不同的?这整件事是愚蠢的吗?我应该从头开始重写它,使用原始的灵感吗?(显然需要原始开发人员"大约一个月"才能做到这一点)
我上面没有提到的一件事是文本/字体系统.不知道该怎么办,但Animator Pro有自己的自定义字体格式,但也可以使用Postscript Type 1字体和其他一些格式.
这出现在我在网上的一次对话中,我发现我不知道这应该如何工作:相当多的程序员似乎只是把它作为一个给定 - 事实上,很明显,类是一种必要的语言管理大型软件项目的功能.
我不明白他们是如何做到这一点的.
我的问题是,你怎么知道的?哪些客观测量表明类可以提高生产力,重用代码并降低程序生产的复杂性?课程的哪些方面使其成为大型团队合作的理想选择?
现在,我想问一个问题,这有点难以表达.如果我弄错了,最后会让任何人感到困惑或愤怒,我很抱歉:
客观地说,您如何知道类的使用不是应用程序开始时的原因?也就是说,是否有可能使用其他代码重用策略编写具有相同功能的程序,代码少得多,小到不需要任何特殊措施来"管理"它?(有许多选择,例如函数式编程范例或面向方面编程).
最后一点是Steve Yegge在他的博客上暗示的东西.但是我对这个论点的双方都持怀疑态度,因为任何人都缺乏任何硬数据,而且没有足够的经验可以自己得出结论.
你怎么看?
编辑:特别是我感兴趣的是为什么许多程序员认为原型样式继承在大型应用程序方面不能胜任任务.对不起这个问题很模糊 - 这是我对这个话题缺乏了解的结果.
edit2:似乎对函数式编程的含义感到困惑.(我认为任何版本的VB都不具备功能,当然不是旧版本).请参阅维基百科文章. http://en.wikipedia.org/wiki/Functional_programming
edit3:让我强调一下,我正在寻找客观的措施.不是主观意见.
我有几个非常老的基于MSDos的绘画程序.它们适用于调色板索引图像缓冲区.它们具有许多壮观的形状绘制工具,画笔和效果,在任何现代绘画程序中都不存在 - 特别是在保持在低调色板索引图像的"边界"内时.我想在现代程序中重现许多这些奇妙的工具,或许让我们再次更容易访问自己和普通大众,而无需启动像dosbox这样的模拟器.但我有一个问题.
虽然很多这些画笔和工具都有明显的功能,但其实现应该相当简单.但是使用其他工具,他们的操作原则并不那么明显.我将无法确定一个正确或忠实的算法来实现这些.
如果你是我,你会采取什么方法?是否有现成的反编译器/反汇编器可以处理这样的旧程序?或者你会采取一些不同的方法,例如有条不紊地测试不同输入的算法,以推断潜在的功能?不同技术的某种组合?对于这些程序的一行,这些(商业)程序的原作者是已知的,现在是狂热的开源倡导者.我应该尝试直接与他们联系并询问吗?我对逆向工程并不是特别有经验,所以我不知道从哪里开始.
编辑:似乎"问,你们应该接受"真的有效.
编辑2:查看http://animatorpro.org获取我获取源代码的程序的源代码.豪华油漆也不错,但丹席尔瓦似乎已经从地球上消失了.
我阅读了最新的编码恐怖帖子,其中一条评论让我感到不安:
这是测试驱动设计/重构应该修复的情况类型.如果(大的话)你有接口测试,重写实现是没有风险的,因为你会知道你是否抓住了一切.
现在,在理论上我喜欢测试驱动开发的想法,但我试图使它工作的所有时间,但一直没有去特别好,我出去的习惯,而接下来的事情我知道所有的测试,我最初写的不仅没有通过,而且它们不再是系统设计的反映.
如果你从一开始就从高处直接交给一个完美的设计(根据我的经验从未实际发生过),这一切都很好,但是如果你在制作系统的中途发现有一个关键的缺陷怎么办呢?该设计?然后它不再是潜入和修复"bug"的简单问题,但你还必须重写所有的测试.一个基本假设是错误的,现在你必须改变它.现在,测试驱动的开发不再是一个方便的东西,但它只是意味着完成所有工作的工作量是其两倍.
我之前尝试过这个问题,包括同行和在线,但我从未听过一个非常令人满意的答案.......哦等等......问题是什么?
您如何将测试驱动开发与必须更改的设计相结合,以反映对问题空间日益增长的理解?你如何让TDD练习为你工作而不是对你有用?
更新: 我仍然不认为我完全理解这一切,所以我无法真正决定接受哪个答案.我的大部分理解都发生在评论部分,而不是答案中.这是迄今为止我最喜欢的收藏品:
"在软件开发中使用像"无风险"这样的术语的人确实充满了蠢事.但是不要因为一些支持者极易受到炒作而注销TDD.我发现这有助于我在写作之前澄清我的想法一大堆代码,帮助我重现bug并修复它们,让我在重新开始看起来丑陋的时候更有信心"
-Kristopher Johnson
"在这种情况下,你只重写了已经改变的接口部分的测试,并认为自己很幸运,在其他地方有良好的测试覆盖率,可以告诉你其他对象依赖于它."
-rcoder
"在TDD中,编写测试的原因是进行设计.使测试自动化的原因是你可以在设计和代码发展时重复使用它们.当测试中断时,它意味着你以某种方式违反了早期设计决定.也许这是你想要改变的决定,但最好尽快得到反馈."
-Kristopher Johnson
[关于测试接口]"测试会插入一些元素,检查大小是否与插入的元素数量相对应,检查contains()是否为它们返回true但是对于未插入的元素,检查remove()是否有效对于所有实现,所有这些测试都是相同的,当然你会为每个实现运行相同的代码而不是复制它.所以当界面改变时,你只需要调整一次测试代码,而不是每次实施一次."
-Michael Borgwardt
在我最近创建的一个Web应用程序中,当我们的一个用户决定用它来创建完全用日语创建的东西时,我感到非常惊喜.然而,文字被奇怪而笨拙地包裹着.显然浏览器不能很好地处理包装日文文本,可能是因为它包含很少的空格,因为每个字符构成一个完整的单词.然而,这并不是一个真正安全的假设,因为有些单词是由几个字符构成的,将某些字符组分成不同的行是不安全的.
谷歌搜索并没有真正帮助我更好地理解这个问题.在我看来,人们需要一本坚不可摧的模式字典,并假设其他地方都可以安全破解.但是我担心我对日语知之甚少,所以我从他的一些搜索中理解的所有单词都非常复杂.
你会如何解决这个问题?您是否知道已经存在的任何库或算法以令人满意的方式处理此问题?
我是PHP程序员,并想知道这条线的含义.
System.out.printf("exp(%.3f) is %.3f%n", x, Math.exp(x))
Run Code Online (Sandbox Code Playgroud)
%.3f,%.3f%n和逗号x是什么意思?
在eclipse中,当我想记录一个函数时(在java或javascript源代码中)我可以输入/**,然后点击回车,我得到这样的评论
/**
*
* Fluctuates all variables to more compatibly foo all the bars
*
* @PARAM {int} foo
*/
function flucvar (foo) {
}
Run Code Online (Sandbox Code Playgroud)
当点击进入评论内部时,eclipse会在每行的开头自动添加额外的*.
现在我只是进入我的文本沟槽,并发现自己错过了这一点功能.是否有一个等效的捆绑或命令或某些东西可以让我在textmate中产生类似的评论?
我有以下JavaScript函数:
function Console() {
this.Log = function(msg) {
if (document.getElementById("console")) {
var console = document.getElementById("console");
console.innerHTML += msg + "<br/>";
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题1: 为什么我需要使用新的关键字?
new Console().Log("hello world");
Run Code Online (Sandbox Code Playgroud)
为什么我不能这样做?
Console().Log("hello world without using new");
Run Code Online (Sandbox Code Playgroud)
问题2:
var logger = function() {
this.log = function(msg) {
new Console().Log(msg);
new Console().Log("log initialized");
}
this.log2 = function(msg) {
new Console().Log(msg);
new Console().Log("log2 initialized");
}
}(); //notice the brackets
Run Code Online (Sandbox Code Playgroud)
由于记录器末尾的(),这不会运行.
new logger().log("hello world");
Run Code Online (Sandbox Code Playgroud)
我知道跟尾()它意味着函数被立即调用,但为什么它不起作用?是因为function(){}(); 不能分配给其他变量?
我正在尝试使用 JavaScript 客户端实现模糊搜索,以搜索 SQL 数据库中包含的较大数据库(大约 300 项)记录。我的限制是不可能对数据库执行实时查询 - 我必须在夜间批处理作业期间将“索引”生成为平面文件。因此,从一个如下所示的数据库开始:
ID. NAME
1. The Rain Man
2. The Electric Slide
3. Transformers
Run Code Online (Sandbox Code Playgroud)
我需要在单个查询中创建如下内容:
Trigram ID
the 1
the 2
he_ 1
he_ 2
e_r 1
_ra 1
rai 1
ain 1
in_ 1
n_m 1
_ma 1
man 1
e_e 2
_el 2
ele 2
lec 2
Run Code Online (Sandbox Code Playgroud)
等等,拼写错误不容忽视。这里的规则是 ''n' 是第一列中字符串的长度,只有 az 和 _ 是有效字符,任何其他字符都标准化为小写,或映射到 _,即由 n 元语法组成的组子句可以应用于表。因此,我希望获得一个表,使我能够快速查找特定的 n 元语法并获取包含该序列的所有行 Id 的列表。我不是一个足够聪明的 SQL cookie 来解决这个问题。你可以吗?
dos ×2
paint ×2
algorithm ×1
allegro ×1
anonymous ×1
bundles ×1
c ×1
cjk ×1
class ×1
cocoa ×1
code-reuse ×1
comments ×1
debugging ×1
decompiling ×1
disassembly ×1
eclipse ×1
function ×1
java ×1
javascript ×1
n-gram ×1
nlp ×1
oop ×1
printf ×1
scale ×1
search ×1
sql ×1
testing ×1
textmate ×1
unicode ×1
word-wrap ×1
workflow ×1
xcode ×1