最近在学习 Spring 的源码,遇到了一些问题,由于类的继承,实现关系十分复杂,有时候,一个方法的实现有好几种,此时我如何有效的判定代码真正进入的实现方法呢? 我现在是用的笨办法,每个实现方法里都打上断点,看停在哪个方法上,不知道前辈们是怎么解决这类问题的
1
coderluan 2019-01-11 00:26:28 +08:00 1
c++的话,intel 有个很好用的工具叫 vtune,运行一遍就能分析整个调用流程,我现在基本都是用这个。
|
2
secondwtq 2019-01-11 01:23:21 +08:00
Java 还好,我这 C++ 的打断点,gdb 先载入一分钟的 symbol ...
|
3
TomVista 2019-01-11 07:58:37 +08:00
画类图,流程图.数据流转图.
|
4
ian19znj 2019-01-11 08:01:09 +08:00
Java 不清楚,我做的是 C#,一般我们的编码规范是父类的方法设为 virtual foo(),子类 override 该方法时,首先必须调用 base.foo(), 再写子类的逻辑。所以将断点设在 base.foo()上,就能从 call stack 上看到是由哪个子类调用的了。
|
5
iluhcm 2019-01-11 08:26:16 +08:00 via iPhone 1
你在断点某个类的时候,这个类的所有成员接口变量的实现就已经确定了,只需要按住 opt 并点击这个接口,就可以知道是哪个实现类了。然后可以通过快捷键快速跳转到实现类。
|
7
mikicomo OP @iluhcm #5 试了下,当该类是抽象类并且同时又实现继承了别的类的时候,在抽象方法调用出打断点,按照你的方法,opt 点击这个接口,显示 undefined,好像并没有作用吧?
|