추억속의 버그 : Java
글쓴이: 권순선 / 작성시간: 화, 2002/04/09 - 10:52오전
프로그램 짜면서 버그한번 없었던 사람은 아마 없겠죠. 아무리 실력있는 사람이라도 초보시절은 있었을 테고 그 실력까지 올라가기 위해 무지하게 많은 버그들을 양산해 냈을 거라는 생각이 듭니다. 마찬가지로, 아무리 좋은 프로그램이라도 버그가 없다고 확신할 수 있는 프로그램 역시 거의 없겠죠.
프로그래머로서 오늘도 버그와 싸우고 있는 여러분들...여러분들은 과연 어떤 버그를 만들어 냈었는지요? 누구나 한번쯤은 양산해 보았을 친근한(?) 버그들이나 여러분의 기억속에 추억으로 남아있는 버그가 있으면 이야기해 보자고요....
* 관리자 코멘트(webmaster):
이번에는 Java에 얽힌 사연들을 기다립니다. C, C++언어에 관한 지난 이야기는 관련 링크를 참조하십시오.
Forums:
OutOfMemoryError...Java는 GC하면서 메모리 공
OutOfMemoryError...
Java는 GC하면서 메모리 공간 확보하는것으로 알고 있는데
저 에러가 자꾸 뜨네요....
프로그램은 연산이 많은 동일 프로그램을 수십만번 돌리는건데 몇시간씩 돌리면 꼭 저 에러가 뜨면서 죽네요.
메모리 누수가 있는건가요? 제대로 GC되면 죽지 않아야
정상이라 생각이 드는데
new byte[]는 좀 있긴 합니다만....
아 이거 해결하신 분 안계신가요?
C 잘하던 친구가 Java를 첨할때... 진짜 있었던 실화...그친구
C 잘하던 친구가 Java를 첨할때... 진짜 있었던 실화...
그친구는.. Kernel 프로그램도 쫌 하고.. Device Drive까지 하니까... 실력은 중상이상이랄까요?
java HelloWorld.java
이것만 하고... 챙피해서 물어보지도 못하고....
( Hello World도 못한다는 소리 들을까봐...)
혼자 몇일을 고민 고민...
--
늘...
헉, 겁쟁이 아님... 제가 한국 사이트서 제일 싫은거.. 어디
헉,
겁쟁이 아님... 제가 한국 사이트서 제일 싫은거..
어디가나 어카운트 만들고 몇살인가 물어보고 주민번호등 개인 정보를 넘 요구하는겁니다. 그런 사이트는 안가던지 아니면 등록 안하고 제한된것만 사용합니다. 그러다가해킹 당해서 다 개인정보누출 시키면 책임 질려고요? 철벽이라고여? 도대체 왜? 가입하라고하는지? 신문사 넘들도 그렇고 하다 못해 우비소년 사인트도 그렇고 그거 뭐 유행입니까? 미국 사이튼 돈 받을려고 하는 포르노 사이트 말고는 가입하라고안하던데..
지난주에 누구 자바 수업 듣는 인간 숙제 해줌서 있었던 일입니다. 그거 프린터 큐 시물레이터데.. 힙을 벡터를 써서 하라고 해서.. 하는데 첫 번째 집어넣는데 계속 ArrayOutofBound exception... 어라 이 잡것 봐라?
함보세요..
public class Heap{
public Heap( ){
//DEFAULT_CAPACITY = 100;
heap = new Vector(DEFAULT_CAPACITY);
// 나중에 끼워 넣은 줄..
// heap.setSize(DEFAULT_CAPACITY);
currentSize = 0;
}
public void insert(Comparable x){
int hole;
currentSize++;
if(currentSize > 0)heap.add(x);
hole = currentSize;
while(hole > 1 && x.compareTo(heap.elementAt(hole/2))<0){
heap.setElementAt(heap.elementAt(hole/2), hole);
hole /= 2;
// ArrayOutOfBoundError 생긴줄..
heap.setElementAt(x,hole);
}
나중에 Core 자바에 찾아봤더니.. 친절하게 네모 상자에 나왔더군여..
찾아보실 분들은 Core Java Volume1 P.190(새 판은 페이지가 틀릴지 모르겠습니다.)
==========================================
Caution: Do not call V.setElementAt(x,i) until the size of vector is larger than i.
이유인 즉 setSize를 안부르면 실질적으로 메모리에 크기가 배정이 안되더군여...
>&< (자바 미워~)
자바 초보시절에 있었던 역시 초보 다운 버그.public clas
자바 초보시절에 있었던 역시 초보 다운 버그.
public class Test
{
public static void main(String[] args)
{
System.out.println("Hello"):
}
}
이거 아무리 해도 안되서 몇 시간 동안 해매다가 잘하는 형한테해서 나온 결론은 System.out.println("Hello"); 와 System.out.println("Hello"): 의 차이 즉, 세미콜론과 콜론의 차이였지요. 에디터의 글꼴도 잘써야지 위에 어떤 분처럼 L(엘)의 소문자와 I(아이)의 대문자도 그리고 숫자 1(일)도 실수없이 분간할 수 있겠지요? ^^
jms selector 에러..TopicSubscriber sub
jms selector 에러..
TopicSubscriber subscriber =
session.createSubscriber(topic, " un != 'guest' ", false);
sql-92조건식이 !=이 맞는걸로 오인해서,
상당시간 삽질을 했다는~ -_-;;;
알고보니 != 이 아니라, <>더군요..^^;
jdbc에서 이런겁니다.. String sql = "insert
jdbc에서 이런겁니다..
String sql = "insert into aaaaa" +
"values( aaa, bbb, ccc)";
무지하게 삽질을 했다는 -_-;
문장사이를 더했는대 공백처리가 문제였죠.. ㅡㅜ
저 역시 같은 문제...그 후로는 무조건 앞뒤에 공백을 둡니다.
저 역시 같은 문제...
그 후로는 무조건 앞뒤에 공백을 둡니다.
공백이 두개 들어가는건 문제가 안되죠...
String sql =
" insert into aaaaa " +
" values( aaa, bbb, ccc) ";
-영희-
저도 그렇게 합니다.세상엔 나와같은 사람이 너무도 많군요. :-)
저도 그렇게 합니다.
세상엔 나와같은 사람이 너무도 많군요. :-)
허걱~그럼 당신은 멋쟁이? ㅋㅋㅋ농담입니다~Prepared
허걱~
그럼 당신은 멋쟁이? ㅋㅋㅋ
농담입니다~
PreparedStatement 사용이 좀더 이쁘죠??
-YoungHee-
스레드생성하고나머지부분처리안하고..귀차나서 퇴사할때까지 매일 리셋시켰
스레드생성하고나머지부분처리안하고..
귀차나서 퇴사할때까지 매일 리셋시켰죠..ㅡㅡ;
악의섞인버그..ㅡㅡ^
..
..
javac TestClass.java오케이~java TestC
javac TestClass.java
오케이~
java TestClass.class
으헉 에러....
클래스 패스?
자바홈?
패스?
버전 차이???
뭐가 문제야????
으악~
한참을 고민하다 결국
java TestClass
오케이~
한동안 씨만을 하다가 갑자기 자바로 돌아서면서
격은 망측한 실수...
-영희-
헉;;저만 그런 줄 알았더니..^^;;
헉;;
저만 그런 줄 알았더니..^^;;
허걱...저와같은 실수를...전 컴터가 맛이 간줄 알았어요..
허걱...
저와같은 실수를...
전 컴터가 맛이 간줄 알았어요..
그래서 포맷했다는 전설이...쩝.. ㅠ.ㅠ
Hello world 에서도 버그가 날 수 있습니다.버그라기보다는
Hello world 에서도 버그가 날 수 있습니다.
버그라기보다는 그냥 에러인데...초보자한테는 충분히 일어날 수 있는 경우입니다.
아는형이 자바배울때 이거 잡느라고 2시간을 허비한거 같습니다. -_-;
public class Test {
public static void main (String[] args) {
System.out.printIn("hello world");
}
}
이 프로그램은 돌리면 에러입니다..왜 그럴까여...?
println 에서 그 형이 알파벳L을 알파벳 i로 썼기 때문이죠.
i를 대문자로 쓰면 L 소문자랑 폰트에 따라서는 거의 똑같거든요..-_-;
저도 초보이고, 그 형도 초보일때 둘이 버벅대던 그런 시절이었습니다..^^;
앗. 저도 아주 처음에 혼자 책보다..그부분을 하루동안 고민했습니다.
앗. 저도 아주 처음에 혼자 책보다..
그부분을 하루동안 고민했습니다. ㅠ.ㅠ
i와 l
java로 웹프로그래밍을 한다면, jdbc connection pool을
java로 웹프로그래밍을 한다면, jdbc connection pool을 쓰게 되는 일이 많죠.
connection pool의 동작이 이상해서 (자꾸 pool에 있는 Connection 객체가 사라지는.) 하루 종일 프로그램 디버깅한 적이 있었습니다. 아무리 봐도 이유를 모르겠기에, 그냥 혹시나 하는 마음으로 그때까지 쓰던 ibm jvm을 blackdown jvm으로 바꾸니 문제가 해결됐던 기억이 나는군요. 지금까지도 그 이유는 모르겠습니다.
어쨌든 jvm을 바꿔서 Connection pool의 문제는 해결했지만, 바꾸고나니 파일을 읽을 때 한글 인코딩 문제가 또 생기더군요. FileReader, FileWriter 객체가 파일을 읽어서 바이트를 문자열로 바꿀 때 ibm jvm과 blackdown jvm이 서로 다르게 동작을 하는 것이었습니다. $LANG 환경변수, 그리고 file.encoding 이라는 자바 환경 변수(?) 값에 따라 서로 다르게 작동하는 것이었죠.
connection pool 문제를 해결해서 흐뭇한 마음으로 퇴근할 무렵에 갑자기 파일을 읽어서 jsp로 출력하는 페이지들이 모두 한글이 깨지는 바람에 난리가 났던 기억이 납니다. 결국 FileReader를 FileInputStream -> InputStreamReader 로 바꿔서 문제를 해결했죠. 하지만 InputStreamReader에 "euc-kr"을 인자로 집어 넣는 방식이라서 영 찜찜했었습니다.
그밖에 또 기억나는 거라면, swing으로 FTP 응용 프로그램(FTP 클라이언트 비스무리한 것)을 만들 때 기억이 있군요.
빨리 일을 하기 위해 IBM에서 배포한 FTP Bean을 사용했는데, 이게 동작이 영 이상한 것이었습니다. 매뉴얼에 적혀 있는 대로 작동하지 않는 것이었죠. 소스라도 공개되어 있다면 어떻게라도 고칠텐데, 소스를 구할 길이 없어, 결국 매뉴얼에 있는 API대로 socket을 써서 새로 구현했지요.(매뉴얼에 있는 API에 맞춰 사용자 인터페이스를 만들었기 땜시..)
그나마 이글이 제일 버그답군요.역시 자바가 MoneyOriente
그나마 이글이 제일 버그답군요.
역시 자바가 MoneyOrientedLanguage 중에서는 제일 소프트웨어공학적으로 우수한것 같습니다.
동의하시는가요?
우후후.... 꼭 자바에 국한된 건 아니지만..-_-for(i=0
우후후.... 꼭 자바에 국한된 건 아니지만..-_-
for(i=0; i 를 해야 하는 것을
for(i=0; i 라고 해서 잡으려고 온동네 코드 다 뒤졌던 것...-_-
Consider the ravens: for they neither sow nor reap; which neither have storehouse nor barn; and God feedeth them: how much more are ye better than the fowls?
Luke 12:24
혹시 이게 아닌지..for(i=0;i<arry.length;i++)
혹시 이게 아닌지..
for(i=0;i 이런거라면.. 저도 역시.. 고생좀..
자바 프로그래밍의 버그라면1.3 에서 socket 프로그래밍을 할
자바 프로그래밍의 버그라면
1.3 에서 socket 프로그래밍을 할때
socket 으로 부터 outputstream 을 먼저 얻지 않고
inputstream을 먼저 얻을 경우 네트워크 통신이
안될때가 있었습니다.
그리고 jdk1.3 에서는
public static void main(String args[]) 에서
public 을 private 으로 해도 실행이 되는 버그(?)가
있었는데
jdk1.4 에서는 private 하다고 실행이 되지 않습니다.
그밖에 가비지컬렉터에도 몇가지 문제가 있었는데
계속 계선되어지고 있는 듯 합니다.
자바가 갈 수록 먹져지는 듯 해서 기분이 좋습니다.
- ttr -
음.... 한번은 이런적이 있습니다.Applet 통신하는 Server
음.... 한번은 이런적이 있습니다.
Applet 통신하는 Server 프로그램을 짰는데요...
서버쪽에서 계속 SocketException이 나는겁니다..
이유를 도저히 모르겠더라구요..
Applet이 stop되거나 destory이 되면 항상 통신을 끊는다는
메시지를 날리는데도 불구하고...
브라우즈를 닫을때는 계속 이 Exception이 나더라구요..
한며칠을 보내다가...
소스코드를 열어놓고 가만히 보고 있는데..
public void destory()이가
public void destroy()로 되어 있는게 아님니까...
헉....
여기서까지 헷갈리셨네요~^^;저만 그런 줄 알았더니...
여기서까지 헷갈리셨네요~^^;
저만 그런 줄 알았더니...
정말이지 쪽팔리는군요..그 놈의 destroy가....쩝...
정말이지 쪽팔리는군요..
그 놈의 destroy가....
쩝...
음... 그렇죠overring 이 된줄 알았는데 안됐을경우...
음... 그렇죠
overring 이 된줄 알았는데 안됐을경우...
이런거 잡아주는 tool이 있을까요? ㅋㅋ
자바로 만든다고 가정할 때,reflection을 쓴다면,그런
자바로 만든다고 가정할 때,
reflection을 쓴다면,
그런 tool을 만드는게, 그리 어렵지 않을 걸로 보이는데요.
두 개의 네임이 유사하냐 안하냐를 어떻게 판단할지가 문제가 되겠지만
과자가 아닙니다.
cuckoo dozen, 즉.12마리의 뻐꾸기란 뜻입니다.
초보자들이 가장 많이 틀리는 부분이지요...String value
초보자들이 가장 많이 틀리는 부분이지요...
String value = "test";
if(value=="test") {
...
}
특히 char는 원시타입이지만 String은 클래스
라 더 헷갈릴 수 있습니다.
흠 겁쟁이라...흠..
흠 겁쟁이라...흠..
방금 자바 플밍 버그를 잡았습니다.추억의 버그는 아니군요..
방금 자바 플밍 버그를 잡았습니다.
추억의 버그는 아니군요..
단지 sql 문 버그..
너무 긴 sql 문으로 인해서 .. 몇자 틀렸는데..
이틀이나 허비 햇습니다..
지금 머리 지어박고 한쉼쉬며 손 놓고 있습니다..
나는 겁쟁이가 아니다..
나는 겁쟁이가 아니다..
그렇다면로그인을 해주세요....
그렇다면
로그인을 해주세요....
잔인하군요... ㅋㅋㅋ이런 비교가 언어를 평가하는데 쓰일 수 없다
잔인하군요... ㅋㅋㅋ
이런 비교가 언어를 평가하는데 쓰일 수 없다는건 다들 아시리라 생각하면서... 캬캬캬
당연히 알죠..--;
당연히 알죠..--;