SlideShare a Scribd company logo
1 of 18
3. 코드 작성시 디버깅
      전한별
   Defensive Programming
   에러를 검출하기 쉽도록 에러에 관한 가능한 많
    은 정보들을 출력하도록 하는 것.
   참이어야 하는 것.
   거짓인 경우에 메시지 상자(등)이 뜸.
   코드의 가정을 설명
       주석을 대신함(주석보다 최신)
   오류 발생 전 프로그램의 상태를 알 수 있음
   기본
       무엇이
         어떤 조건이 참이 아닌가
       왜
         왜 참이 아닌가
       어디에서
         어디에서 참이 아닌가
   매개변수
     유효한가
     범위가 맞는가
     …
     잘못된 매개변수가 들어왔을 때마다 관련 어썰트 추가
         ->중복문제 방지
   API/COM의 결과
       성공했는가.
         에러는 없었는가.
           있다면 잘 헨들링 하든가 어썰트를 띄어야.
   가정
       가정이 지켜졌는가.
   Debug.Assert( Condition )
   TraceListener
       Default, TextWriter, XmlWriter, EventLog, …
         StackTrace( true )
           -> Callstack까지 보여줌
             .pdb 조사
   향상된 무시 기능
       한 번 무시
       지정된 횟수 만큼 무시
       완전 무시
       모든 어썰트 비활성화
       * 주의
         오류의 발견 가능성을 저하시킨다.
   덤프 생성
   콜스택 확인
   지역변수 상태 확인
   기타
       어썰트 모든 내용 복사
       소스 파일 소유자에게 메일
   디버깅에 도움이 될 만한 정보를 남기어 놓는 것.
   Printf, cout, DebugOutputString, …
   적당한 양의 정보를 출력해야 함.
   유용한 프로그램
       DebugView
         DebugOutputString의 call을 감시하여 해당 출력을
          View에 보여줌.
         디버거에 연결되어 있지 않아도 된다고 함.
         네트워크도 지원돼서 다중 PC의 DebugOutput도 한 PC
          에서 모니터링
   Trace.Write/WriteLine/WriteIf/WriteLineIf
   TraceSwitch
       추적 레벨
       Off(0)
        < Error(1)
        < Warnings(2)
        < Info(3)
        < Verbose(4-전부)
       Config에서 설정 가능
   멀티 스레딩
       Log를 남기기 위해 하나의 스레드가 Trace를 호출 할
        때마다 다른 스레드들은 대기를 타야 함.
         퍼포먼스 이슈
   직접 생성할 수 있는 Trace 객체
   활용
       주요 Subsystem당 1개 생성
   SourceSwitch
       Trace처럼 TraceSource에 지정해주는 추적 레벨
   TraceFilter
       추적된 로그들을 거를 수 있는 Filter를 설정할 수 있
        음.
   X
       코드가 무엇을 하는지 그대로 반복서술
   O
       코드 작성시 했던
         가정
         접근방법
         접근 방법의 이유
         …
         240p
   메서드
       루틴이 하는 일
       메서드가 한 가정
       입력 매개 변수 스펙
       출력 매개 변수 스펙
       반환 값 스펙
       메서드에서 발생할 수 있는 예외
   코드상에서 분명하지 않은 함수의 기능에 대해 설명
   중요한 알고리즘은 완벽하게 설명
   * 5년 후 코드를 유지 보수 할 수 있을까?라는 질문에
    예로 답변할 수 있도록 하는 마인드로 관리
   * 사용되지 않는 코드는 주석하지 않고 삭제
   문서화 할 때 편리
   자동으로 XML 주석을 뽑아주는 add-in 존재
       GhostDoc
   MSDN 수준의 문서화 지원
       Document! X
   MS에서 도움말 파일 생성할 때 쓰는 도구
       SandCastle
Net debugging 3_전한별

More Related Content

Viewers also liked

덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012Esun Kim
 
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)Sang Don Kim
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great InfographicsSlideShare
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareEmpowered Presentations
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingContent Marketing Institute
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShareKapost
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation OptimizationOneupweb
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksSlideShare
 

Viewers also liked (9)

덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
 
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great Infographics
 
You Suck At PowerPoint!
You Suck At PowerPoint!You Suck At PowerPoint!
You Suck At PowerPoint!
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShare
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
 

Similar to Net debugging 3_전한별

윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015Kris Jeong
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2Wooseok Seo
 
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 APINAVER Engineering
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법NAVER D2
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계Chiwon Song
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계Leonardo YongUk Kim
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010Ryan Park
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10Ryan Park
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 releaseJaehyeuk Oh
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3Wooseok Seo
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
세션1. block chain as a platform
세션1. block chain as a platform세션1. block chain as a platform
세션1. block chain as a platformJay JH Park
 
Bug sense 분석
Bug sense 분석Bug sense 분석
Bug sense 분석logdog
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법Daniel Kim
 

Similar to Net debugging 3_전한별 (20)

윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015Going asynchronous with netty - SOSCON 2015
Going asynchronous with netty - SOSCON 2015
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2
 
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
세션1. block chain as a platform
세션1. block chain as a platform세션1. block chain as a platform
세션1. block chain as a platform
 
Bug sense 분석
Bug sense 분석Bug sense 분석
Bug sense 분석
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법
 

Recently uploaded

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 

Recently uploaded (6)

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 

Net debugging 3_전한별

  • 1. 3. 코드 작성시 디버깅 전한별
  • 2. Defensive Programming  에러를 검출하기 쉽도록 에러에 관한 가능한 많 은 정보들을 출력하도록 하는 것.
  • 3.
  • 4. 참이어야 하는 것.  거짓인 경우에 메시지 상자(등)이 뜸.  코드의 가정을 설명  주석을 대신함(주석보다 최신)  오류 발생 전 프로그램의 상태를 알 수 있음
  • 5. 기본  무엇이  어떤 조건이 참이 아닌가  왜  왜 참이 아닌가  어디에서  어디에서 참이 아닌가
  • 6. 매개변수  유효한가  범위가 맞는가  …  잘못된 매개변수가 들어왔을 때마다 관련 어썰트 추가  ->중복문제 방지  API/COM의 결과  성공했는가.  에러는 없었는가.  있다면 잘 헨들링 하든가 어썰트를 띄어야.  가정  가정이 지켜졌는가.
  • 7. Debug.Assert( Condition )  TraceListener  Default, TextWriter, XmlWriter, EventLog, …  StackTrace( true )  -> Callstack까지 보여줌  .pdb 조사
  • 8. 향상된 무시 기능  한 번 무시  지정된 횟수 만큼 무시  완전 무시  모든 어썰트 비활성화  * 주의  오류의 발견 가능성을 저하시킨다.  덤프 생성  콜스택 확인  지역변수 상태 확인  기타  어썰트 모든 내용 복사  소스 파일 소유자에게 메일
  • 9.
  • 10. 디버깅에 도움이 될 만한 정보를 남기어 놓는 것.  Printf, cout, DebugOutputString, …  적당한 양의 정보를 출력해야 함.  유용한 프로그램  DebugView  DebugOutputString의 call을 감시하여 해당 출력을 View에 보여줌.  디버거에 연결되어 있지 않아도 된다고 함.  네트워크도 지원돼서 다중 PC의 DebugOutput도 한 PC 에서 모니터링
  • 11. Trace.Write/WriteLine/WriteIf/WriteLineIf  TraceSwitch  추적 레벨  Off(0) < Error(1) < Warnings(2) < Info(3) < Verbose(4-전부)  Config에서 설정 가능
  • 12. 멀티 스레딩  Log를 남기기 위해 하나의 스레드가 Trace를 호출 할 때마다 다른 스레드들은 대기를 타야 함.  퍼포먼스 이슈
  • 13. 직접 생성할 수 있는 Trace 객체  활용  주요 Subsystem당 1개 생성  SourceSwitch  Trace처럼 TraceSource에 지정해주는 추적 레벨  TraceFilter  추적된 로그들을 거를 수 있는 Filter를 설정할 수 있 음.
  • 14.
  • 15. X  코드가 무엇을 하는지 그대로 반복서술  O  코드 작성시 했던  가정  접근방법  접근 방법의 이유  …  240p
  • 16. 메서드  루틴이 하는 일  메서드가 한 가정  입력 매개 변수 스펙  출력 매개 변수 스펙  반환 값 스펙  메서드에서 발생할 수 있는 예외  코드상에서 분명하지 않은 함수의 기능에 대해 설명  중요한 알고리즘은 완벽하게 설명  * 5년 후 코드를 유지 보수 할 수 있을까?라는 질문에 예로 답변할 수 있도록 하는 마인드로 관리  * 사용되지 않는 코드는 주석하지 않고 삭제
  • 17. 문서화 할 때 편리  자동으로 XML 주석을 뽑아주는 add-in 존재  GhostDoc  MSDN 수준의 문서화 지원  Document! X  MS에서 도움말 파일 생성할 때 쓰는 도구  SandCastle