调试的过去和现在
Debugging in the past and now
我现在注册了 Udacity 的这门课程 Software Development Process,讲师说,用于填补软件复杂性和开发人员生产力调试之间差距的方法之一是从打印行转移到符号调试。
任何人都可以说明这实际上意味着什么?
以前:
print("Before doing this ...");
int x = dothis();
printf("Before doing that ...; x=%d", x);
int y = dothat(x);
今天:
所有局部变量都可以在调试器中看到并可以在那里修改。可以在调试器中看到调用堆栈。您可以在任何代码行停止,甚至可以将指令指针移回上一行。
所有打印语句都是不必要的。没有在源代码中忘记它们的风险,制作速度较慢且危险(记住 Apple 的打印密码错误)。
为了实现这一点,除 EXE 文件外,调试器还使用由编译器存储的符号。在 Windows 上,它们存储在 PDB 文件(程序数据库)中,从而为客户提供了一个小的 exe,为开发人员提供了额外的数据。
我现在注册了 Udacity 的这门课程 Software Development Process,讲师说,用于填补软件复杂性和开发人员生产力调试之间差距的方法之一是从打印行转移到符号调试。 任何人都可以说明这实际上意味着什么?
以前:
print("Before doing this ...");
int x = dothis();
printf("Before doing that ...; x=%d", x);
int y = dothat(x);
今天:
所有局部变量都可以在调试器中看到并可以在那里修改。可以在调试器中看到调用堆栈。您可以在任何代码行停止,甚至可以将指令指针移回上一行。
所有打印语句都是不必要的。没有在源代码中忘记它们的风险,制作速度较慢且危险(记住 Apple 的打印密码错误)。
为了实现这一点,除 EXE 文件外,调试器还使用由编译器存储的符号。在 Windows 上,它们存储在 PDB 文件(程序数据库)中,从而为客户提供了一个小的 exe,为开发人员提供了额外的数据。