Phrap0.990329 patch

From CSBLwiki

Jump to: navigation, search

Segmentation fault 발생

http://www.stanford.edu/~cpalm/general/archives/000079.html 에서 패치파일을 받음

소스가 있는 폴더에서 다음 명령 실행 cat phrap-AMD64.patch| patch -p1

p1 => 패치파일 내 경로의 1번째를 생략한다는 의미 p0 => 경로 생략 안함


연구실 프로젝트 관련하여 phrap assembler를 사용하게 되었는데,

일단 phrap은 릴리즈를 받는 곳이 따로 없고

http://www.phrap.org/ 에 가서 절차를 밟아야 메일로 받을 수 있다.


근 10년동안 버전업이 없는 프로그램이라고 한다.

함께 제공되는 consed의 경우 1명의 개발자로부터 꾸준히 업데이트가 이루어지고 있다고 하는데..

따라서 일단 개발자가 불성실한 것은 아니다 ㅋ)

완벽해서 더 이상 버전업이 없나? ㅋㅋ


암튼 각설하고,

phrap의 기본 사용법은 매우 간단하다.


$> ./phrap test.fasta


이렇게만 하면, fasta파일 안에 있는 read들을 조립해 준다.

(이 외에 무수한 옵션이 있지만, 기본적인 사용법은 이렇다.)


그런데, 중간에 segmentation fault가 발생했다.

fasta파일에 이상이 있나 싶어서 리드를 이리저리 바꿔가면서 해 봤는데

fasta 형식에는 아무 이상이 없었다.

최소 셋을 만들기 위해 리드를 딱 2개만 넣었을 때에도

어떤 때는 에러가 나고, 어떤 때는 에러가 나질 않는 거다.


패치를 찾아보았지만 그런 건 없는 듯 하고 (버전없도 10년째 없으니ㅋ)

답은 구글링 중에 찾았는데,

http://www.stanford.edu/~cpalm/general/archives/000079.html

여기다.


이 분, 근성가이인 듯 하다. 대개 문제가 생기면 에러 레포트를 보내고 답을 기다릴텐데,

이 사람은 남의 코드를 직접 디버깅해버렸다.

디버그 모드로 다시 컴파일해서, 하나하나 디버거로 트레이스를 따라가면서

어디서 에러가 나는지 알아냈다는 ㅎㅎㅎㅎ

저 분이 만들었다는 패치 파일은 링크가 깨져 있지만, 본문의 내용을 바탕으로 phrap코드를 수정했다.


문제를 일어난 이유는

getLLC 함수를 호출하는 부분에서 NULL로 인자를 주어야 하는 부분에 0을 인자로 주었기 때문이다.

특정 머신에서는 pointer값에 0을 입력하면 그것을 NULL로 인식하지만,

다른 머신에서는 0을 주소값 0으로 인식할 수 있다고 한다.

아마도 제작자의 머신은 전자 쪽인가보다.


따라서

phrap 소스가 있는 폴더에서

$> grep get_LLR *.c

를 수행하면 get_LLR이 포함된 부분이 쭉 나온다.

그 파일들을 모두 열어서, get_LLR을 호출하는 부분을 찾은 다음에

13번째, 14번째 파라미터를 찾아서, 혹시 그 부분이 0으로 되어 있다면

그 부분을 NULL로 고쳐주면 된다.

그 다음에 다시 make하면 샤샤샥~ 잘 돌아간다 ㅎㅎ


오늘의 결론 :

암튼 세상엔 근성가이들이 많다.

[출처] Phrap의 segmentation fault 고치기|작성자 여윤구

Personal tools
Namespaces
Variants
Actions
Site
Choi lab
Resources
Toolbox