Android Studio 의 Debug 런 타임 코드 삽입 방법

저희 가 개발 할 때 IDE 의 Debug 기능 을 자주 사용 합 니 다.가장 자주 사용 하 는 것 은 단점 으로 변수 내용 을 보 는 것 입 니 다.이 글 은 Debug 에서 자주 사용 하 는 기능,예 를 들 어 Debug 변수 업데이트,동적 코드 간접 광고 등 을 소개 합 니 다.
배경
다음 코드 보 세 요.

@Data
@ToString
@AllArgsConstructor
public class User {
  private String name;
  private String sex;
}

public class Client {
  private static final String[] NAMES = {"  ", "  ", "   "};
  private static final List<User> USERS = Arrays.stream(NAMES)
      .map(name -> new User(name, " "))
      .collect(Collectors.toList());

  public static void main(String[] args) {
    for (User user : USERS) {
      System.out.println(user);
    }
  }
}
우리 가 직접 이 코드 를 실행 해서 얻 은 출력 은 다음 과 같다.
Client.User(name=미국 팀,sex=남)
Client.User(name=호크,sex=남)
Client.User(name=흑 과부,sex=남)
다음은 이 코드 를 둘러싸 고 설명 하 겠 습 니 다.
노 멀 인 터 럽 트
개발 과정 에서 일반적인 정지점 은 Debug 과정 에서 가장 자주 사용 하 는 편 입 니 다.코드 에 이 유형의 정지점 을 추가 하면 Debug 모드 에서 코드 가 줄 이 바 뀌 면 프로그램 이 걸 린 상태 에 들 어 갑 니 다.이때 우 리 는 현재 의 운행 상 태 를 볼 수 있 습 니 다.그림 과 같 습 니 다.

조건 부 정지점
정지점 을 추가 하 는 방법 은 여러 번 실 행 될 것 입 니 다.우 리 는 프로그램 이 특정한 곳(예 를 들 어 현재 user 가 일 때 만)에서 끊 어 지 기 를 바 랍 니 다.이때 우 리 는 조건 을 빌려 정지점 을 끊 을 수 있 습 니 다.다음 과 같 습 니 다.
Condition부분 을 살 펴 보 세 요.여 기 는 하나의boolean형식의 값 을 되 돌려 야 합 니 다.이 값 은 프로그램 이 이 줄 코드 를 실행 할 때 정지점 을 진행 하 는 지,true 는 정지점 을 표시 하고 false 는 반대로 합 니 다.위 에 서 는 에 대해 서 만 정지점 을 해 야 하기 때문에 추 가 된Condition" ".equals(user.getName())이다.
변수 상태 변경
인 터 럽 트 시의 변수 할당 작업 이 필요 할 때 이 변수의 값 이 변경 되 었 습 니 다.이 때 는Set Value방식 을 사용 할 수 있 습 니 다.다음 과 같 습 니 다.
Set Value을 제외 하고 평가 기 를 통 해 값 상 태 를 바 꿀 수 있 습 니 다.다음 과 같 습 니 다.

조건 부 정지점+코드 간접 광고
변수 상 태 를 바 꾸 면 변수 값 을 동적 으로 설정 할 수 있 습 니 다.조건 단점 은 단점 을 제어 할 수 있 습 니 다.이 곳 에서 걸 수 있 습 니 다.이 두 가 지 를 결합 하면 프로그램 이 걸 리 지 않 은 상태 에서 동적 코드 로 간접 광 고 를 하 는 효 과 를 얻 을 수 있 습 니 다.
Condition에 삽 입 된 코드 는 다음 과 같다.

if ("   ".equals(user.getName())) {
  user.setSex(" ");
}
//     false    IDE               
return false;
이 는 운행 기 코드 의 동적 간접 광 고 를 제공 하 는 것 과 같 으 며,Enable/Disable정지점 의 상 태 를 통 해 이 부분의 동적 코드 가 실행 되 는 지 여 부 를 열 거나 닫 을 수 있다.우 리 는 이러한 방식 으로 추가 하고 싶 은 코드 를 추가 할 수 있 습 니 다.예 를 들 어 모든 user 대상 print 전에 자체 적 으로 print 를 추가 할 수 있 습 니 다.

응용 장면
Debug 기간 에 동적 으로 간접 광 고 를 하 는 응용 장면 이 많 습 니 다.Android 엔 드 에 대응 하여 가끔 은 하나의 변 수 를 바 꾸 고 코드 를 추가 하면 전체 Project 를 다시 실행 해 야 합 니 다.전체 copile 과 install 시간 이 걸 려 야 변경 후의 효 과 를 알 수 있 습 니 다.만약 에 현재 변경 이 잘못 되면 다시 수정 하고 다시 실행 해 야 합 니 다.debug 방식 을 통 해직접 조작 할 수 있 습 니 다.백 엔 드 가 바 뀔 때마다 재배 치 하 는 것 도 마찬가지다.
안 드 로 이 드 장면 을 예 로 들 면 다음 과 같은 코드 는 하나의imageUrl인 자 를 받 고 불 러 옵 니 다.

public class ImageActivity extends Activity {

  private static final String KEY_CONTENT = "imageUrl";

  public static void open(Context context, String content) {
    Intent intent = new Intent(context, ImageActivity.class);
    intent.putExtra(KEY_CONTENT, content);
    context.startActivity(intent);
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ImageView imageView = findViewById(R.id.image);
    //       
    String imageUrl = getIntent().getStringExtra(KEY_CONTENT);
    Glide.with(this).load(imageUrl).into(imageView);
  }

}
코드 를 삽입 하지 않 기 전에 현재 페이지 로 이동 하 는 것 은 이 렇 습 니 다.

이때 현재imageUrl인 자 를 동적 으로 바 꾸 려 면 Debug 모드 를 하고 동적 코드 간접 광 고 를 통 해imageUrl변수의 재 할당 을 할 수 있 습 니 다.다음 과 같 습 니 다.

간접 광 고 를 추가 한 후 Debug 모드 에 들 어간 다음 에 이 페이지 에 다시 들 어가 면 표 시 된 그림 은 수 정 된 것 으로 바 뀌 었 습 니 다.
 
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기