디버깅 중인 모든 것들그물

5774 단어 csharpdotnet
최근에 나는 어쩔 수 없이 디버깅을 했다Google's Storage SDK.분명히 현재 OSS 세계에서 이 점을 실현하는 자연스러운 방법은 리포를 간단하게 복제하고 로컬에서 구축한 다음에 원하는 것을 디버깅하는 것이다.희망!내가 보기에 코드 라이브러리는 이렇게 복잡하고 대부분이 자동으로 생성되어 프로그래머에게는 전혀 소용이 없으며, 그것을 이해하는 것은 전혀 의미가 없다.이외에 코드는 로컬에서 구축되지 않습니다.사람들은 이 점을 실현하기 위해 구글 내부 도구와 스크립트를 사용해야 할지도 모른다. (아마도 구글 개발자는 들어본 적이 없을 것이다. NET/C#?)아마도 너도 비슷한 방식으로 구글 브라우저를 구축할 수 있을 것이다.그것도 소스 코드를 요구한 사람의 보상 패키지일 수 있습니까?이런 인코딩 스타일은 또 다른 암호화 방식이다. 그래, 너는 그것을 읽을 수 있지만, 그것은 쓰레기이기 때문에 쓸모가 없다.
최종 해결 방안은 사용dotPeek from Jetbrains이다.대다수의 사람들이 그것을 사용하여 역번역을 한다.NET 프로그램 집합 및 소스 코드 찾아보기허허, 홈페이지에도 네가 그것을 써서 무엇을 해야 한다고 쓰여 있다.

네, NuGet에서 역컴파일된 Google SDK를 가져와서 볼 수 있습니다.dotPeek의 역컴파일 보기는 GitHub에서 발표한 것보다 훨씬 좋습니다.최근에 나는 왜 누군가가dot Peek을 필요로 하는지 정말 알고 싶다. 대부분의 코드는 원본이고, 아무것도 보지 못한다.NET는 바이너리로만 연관됩니다.네, 제3자의 내부 라이브러리에 대한 해킹.dll이 유용할 수 있지만 흥미롭지도 않고 자주 일어나지도 않습니다.이런 특수한 상황에서 소스 프로젝트의 소스 코드가 매우 복잡하고 심지어 깨끗한 기계에서 컴파일할 수 없을 때dotPeek을 사용하여 코드를 조회할 수 있다.
참고로, 아니오, 당신은dotPeek을 사용하여 제3자 코드를 디버깅할 수 없고, 적어도 단독으로 디버깅할 수 없습니다.하지만 Visual Studio는❤ dotPeek은 제3자 코드를 디버깅할 수 있습니다.

기호 서버


이를 정확하게 이해하기 위해서, 우리는 VisualStudio가 어떻게 어떤 것을 디버깅하는지 알아야 한다.간단하게 말하면, 우리는 당신의 코드를 볼 것입니다.디버그 설정에서 컴파일할 때net 컴파일러는 두 가지 일을 생성합니다. (더 많지만, 가능한 한 간단합니다.)
  • 2진법(.dll,.exe 등)
  • 디버그 기호(.pdb)
    디버그 기호는 실제로도 발표 모드에서 생성되지만, 제한을 받아서 우리가 작성한 코드를 디버깅하는 데 도움을 줄 수 없습니다.어쩌면 이것은 단독적인 토론일지도 모른다.
  • 디버그 세션을 시작할 때 VS (또는 Jetbrains Rider, VS Code 등 다른.NET IDE) 는 .pdb 파일의 정보를 사용하여 컴파일된 바이너리 파일의 내용과 원본 코드에 대응하는 메타데이터를 찾을 것입니다. (마찬가지로 간단하게 말하자면)그것 없이는 디버깅을 할 수 있지만, 무엇을 하고 있는지, 원본 코드에 대한 위치를 알 수는 없을 것이다.분명히 .pdb 코드를 수정하고 컴파일할 때마다 변화가 발생한다.
    그래서 너는 이제 자신의 코드를 디버깅할 수 있다.너도 디버깅할 수 있어.NET 코드 자체는 기본이 아닙니다.다음 행으로 이동할 경우:
    Guid g = Guid.NewGuid();
    
    IDE가 디버깅하는 방법을 모르기 때문에 아무 일도 일어나지 않습니다. IDE에 .pdb 파일이 없습니다.그러나 다음과 같이 쉽게 열 수 있습니다.
  • 당신의 코드만이 아닙니다.Tools->Options->Debugging->General에서 "내 코드만"이 닫혀 있는지 확인하십시오.
  • MS Symbol 서버를 엽니다.

  • 지금 줄을 서보세요.VS는 네가 무엇을 하고 싶은지 물어볼 것이다(나는 옵션 1이나 옵션 2를 선택할 것이다. 네가 화를 내고 싶은 정도에 달려 있다). 이제 너는 이 방법에 들어갈 수 있다!

    여기에서, 당신은 내가 Windows에서 이것을 디버깅하고 있다는 것을 알 수 있습니다. 만약 당신이 Visual Studio: 라고 말하는 것을 아직 듣지 않았다면, 호출이 OLE 32 서브시스템으로 전송되었기 때문입니다.
    기호 서버의 두 번째 옵션은 "Nuget. org symbol Server"입니다.이것은nuget에서 디버그 기호를 다운로드할 수 있습니다.이런 방식으로 외부 코드를 조직하고 디버깅하다.그러나 이런 방법의 심각한 한계는 가방에 의존하는 것이다.패키지 작성자는 디버그 기호를 패키지의 바이너리 파일과 함께 발표해야 합니다.구글은 없습니다. 우리는 원인을 알고 있습니다.

    너 자신의 진상 원천


    네가 거의 모든 것을 디버깅할 수 있다는 것을 알고 있는 이상, 디버깅 기호만 있으면, 우리는dot Peek으로 돌아갈 수 있다.DotPeek의 멋진 기능을 보십시오. 그러나 잘 알려지지 않은 것은dotPeek 자체가 기호 서버를 충당할 수 있다는 것입니다. 이것은 IDE(VS)를dotPeek에 가리키고 기호 생성 작업을 마운트 해제할 수 있음을 의미합니다.이것은 반컴파일러이기 때문에dotPeek 서버에서 디버깅하는 정보는 자연스러웠다. 바이너리 파일을 분석하고 이해했으며, 관련 원본 코드를 표시하여 예쁘게 만들었다.

    따라서 다음 단계는 필요한 패키지/프로그램 집합을 프로그램 집합 자원 관리자에 불러오고 디버깅할 패키지/프로그램 집합만 불러올 수 있습니다.디버그 기호를 만드는 것은 긴 작업일 수 있음을 기억하십시오. 따라서 최소한으로 유지하는 것을 권장합니다.이 특정한 가방은 약 10초 정도 걸릴 수 있지만, 전체 가방을 디버깅해 보십시오.NET SDK를 시작하려면 몇 십 분이 걸릴 수 있습니다.

    그런 다음 Tools->Symbol Server로 이동하여 서버를 시작합니다.네가 처음 이렇게 했을 때, 그것은 약간의 대화상자를 표시할 수 있지만, 나는 이미 그것을 잃었고, 그것이 무엇인지 기억하지 못한다.나는 그 중 하나가 내가 만든 Assembly Explorer가 연 것만 디버그 기호를 만드는 것이라고 생각한다.

    어쨌든, 이 모든 것을 바꿀 수 있는 설정이 있다.dotPeek의 상태 표시줄에는 서버 주소 및 디버그 기호 생성 진행 상태와 같은 기본 정보가 표시됩니다.서버는 거의 즉시 시작되고 요청에 따라 내용만 생성됩니다. 즉, IDE에서 특정한 방법으로 들어갈 때 .dll 첫 번째 단계로 들어갈 때 지연됩니다.
    마지막으로 DotPeek 기호 서버의 주소를 VS 설정에 추가합니다.

    이렇게 하면 전체 URL을 기호 파일 위치로 추가하기만 하면 됩니다.VS UI를 사용할 때 다른 모든 컨텐트를 기본값으로 유지하면 명확하지 않습니다.
    이제 디버그 세션을 시작하고 정상적인 '개입' 을 관찰하십시오. 마치 당신 자신과 같습니다.

    한편 이 글은originally published on my blog이다.

    좋은 웹페이지 즐겨찾기