Debugging 调试过去和现在

Debugging 调试过去和现在,debugging,testing,software-design,Debugging,Testing,Software Design,我现在参加了这门关于Udacity的课程,讲师说,用来填补软件复杂性和开发人员生产率之间差距的方法之一是从打印行调试转移到符号调试。 任何人都可以说明这实际上意味着什么?以前: print("Before doing this ..."); int x = dothis(); printf("Before doing that ...; x=%d", x); int y = dothat(x); 今天: 所有局部变量都可以在调试器中看到,并且可以在调

我现在参加了这门关于Udacity的课程,讲师说,用来填补软件复杂性和开发人员生产率之间差距的方法之一是从打印行调试转移到符号调试。 任何人都可以说明这实际上意味着什么?

以前:

print("Before doing this ...");
int x = dothis();
printf("Before doing that ...; x=%d", x); 
int y = dothat(x);
今天:

所有局部变量都可以在调试器中看到,并且可以在调试器中修改。调用堆栈可以在调试器中看到。您可以在任何代码行停止,甚至可以将指令指针移回前一行

所有打印语句都是不必要的。不存在在源代码中忘记它们的风险,这样做既慢又危险(记住苹果的打印密码错误)


为了实现这一点,调试器除了使用EXE文件外,还使用编译器存储的符号。在Windows上,它们存储在PDB文件(程序数据库)中,从而为客户提供一个小的exe,为开发人员提供附加数据。

请花些时间阅读。例如,不要在程序本身中打印中间内容,现在我们可以利用编译到可执行文件中的符号调试信息使用调试器。如果这个答案对您来说足够了,您可以用复选标记它,以便其他人看到问题得到了回答。