ls는 strace에서 다르게 동작합니다.

ls는 strace에서 다르게 동작합니다.

이 상황을 디버깅하는 방법을 모르겠습니다.

1) 다음을 실행하려고 합니다.

ls /home/user

2) ls는 아무것도 차단하고 인쇄하지 않습니다. 이것은 /home/user에 sshfs 마운트 디렉토리인 /home/user/sshfs_files가 포함되어 있지만 내 컴퓨터에서 네트워크가 다운되었기 때문이라고 생각합니다(네트워크가 다시 연결되었지만 SSH 연결이 끊어진 것 같습니다).

3) sshfs 마운트 디렉터리를 정지 원인으로 식별하고 싶었기 때문에 strace에서 동일한 명령을 시도했습니다.

strace -o /tmp/log ls /home/user

4) ls는 작동합니다! 따라서 현재 상황은 ls가 strace에서 작동하지만 자체적으로 차단된다는 것입니다.

이것이 어떻게 가능한지? 이 상황을 어떻게 설명해야 할까요? ls가 strace에서 차단되지 않으면 어디서 차단되는지 어떻게 알 수 있나요?

감사해요!

답변1

~처럼jw13거의 "라고 지적했다.ls는 작은 디렉토리에서 오랜 시간이 걸립니다" -적어도 설명에 관한 한. 거기에 있는 댓글을 꼭 읽어보세요!

간단히 말해서, ls일부 인기 있는 명령줄 프로그램은 출력이 터미널에 직접 전송되지 않을 때 다르게 작동합니다. 이 경우 색상 지정을 위해 각 디렉토리 항목의 유형을 감지하려고 시도하는 ls의 별칭일 수 있습니다 . ls --color=auto이 시점에서는 작동이 중단되어 statsshfs 설치 디렉터리에서 작업을 수행할 수 없습니다.

에 추가하다위 질문에 대한 MadScientist의 답변strace: ' 동작을 디버깅하는 방법 이나 gdb도움이 될 수 있는지 궁금하다면 ls다음과 같은 실행을 권장합니다.

 strace -o /tmp/log ls --color=always /home/user

답변2

글쎄, 이것은 디버깅 중인 프로그램의 일반적인 동작이며 실제로 피할 수 없습니다. 변수 초기화가 변경되고 더 많은 정보를 사용할 수 있으며 프로그램 흐름이 변경됩니다.

ls의 소스 코드를 가져와서 다른 디버거를 통해 실행하고 오류가 표시되기를 바라거나 다른 방법으로 답변, 해결 방법을 찾아보십시오.

관련 정보