Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: Debug chương trình C. Tại sao?

  1. #1
    Ngày gia nhập
    10 2006
    Bài viết
    5

    Talking Debug chương trình C. Tại sao?

    Chào các bác, em mới bít đến cộng đồng C Việt wa ddth, em thấy khoái rồi. Em nhập mâm với chút thắc mắc mong các bác chỉ giáo:
    Em có một đoạn code như sau:
    Code:
    void LietKeHV(int a[],int n,int &m)
    {
    	int i,h[50];
    	for(i=1;i<=n;i++) h[i]=i;
    	printf("\nChinh hop thu %2d :",m++);
    	View_CH(a,h,n);(*)
    	while(!HvCuoi(h,n))
    	 {HvKeTiep(h,n);
    		printf("\nChinh hop thu %2d :",m++);
    		View_CH(a,h,n);(**)
    	 }
    }
    Các bác cho em hỏi là tại sao khi em đặt breakpoint ở dòng (*) thì máy báo ko thỏa mãn và khi complie em thấy nó ko dịch dòng (*) mà nhảy luôn xuống dòng (**), thế là thế nào??? , mong mọi người chỉ giáo.

  2. #2
    Ngày gia nhập
    10 2006
    Bài viết
    5

    Ủa, ko ai có câu trả lời cho em hay sao??? chẳng nhẽ mọi người cũng giốn em??

  3. #3
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    bạn thử chèn

    int abcdatdediia=0;
    abcdatdediia++;

    vào đầu hàm, xem nó có nhảy vào 2 hàng này không?

  4. #4
    Ngày gia nhập
    07 2006
    Bài viết
    166

    Trích dẫn Nguyên bản được gửi bởi chuma
    Các bác cho em hỏi là tại sao khi em đặt breakpoint ở dòng (*) thì máy báo ko thỏa mãn và khi complie em thấy nó ko dịch dòng (*) mà nhảy luôn xuống dòng (**), thế là thế nào??? , mong mọi người chỉ giáo.
    Thế nào là không thoả mãn hả bạn? bạn thử viết cả một chương trình minh họa lỗi trên thì mới giúp đc.

  5. #5
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,749

    Ủa, ko ai có câu trả lời cho em hay sao??? chẳng nhẽ mọi người cũng giốn em??
    Mọi người vào đây đều rất nhiệt tình đó, nhưng mà không hiểu được ý là gì, làm sao mà giúp đây.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  6. #6
    Ngày gia nhập
    10 2006
    Bài viết
    5

    Mặc định Debug chương trình C. Tại sao?

    Xin lỗi các bác nhé, chắc tại em viết khó hiểu quá+lười post toàn bộ code lên.
    Đây là code của toàn bộ ctrinh, đoạn đánh dấu (*) và (**) tương ứng.
    Mong mọi người bỏ chút thời gian giải thích hộ em!!!
    Ah quên, em dùng TC(3.1), không biết trong VC có thế không nhỉ??

    Code:
    //LK_TH.CPP Liet ke cac to hop n chap k
    int Nhap_TH(int a[],int &n)
    {
    	int i,j,k,t;
    	printf("\n Nhap n: ");
    	scanf("%d",&n);
    	for(i=1;i<=n;i++) scanf("%d",&a[i]);
    	//Sap xep lai
    	for(i=1;i<=n;i++)
    	 {k=i;
    		for(j=i+1;j<=n;j++) if(a[j]<a[k]) k=j;
    		if(k!=i) {t=a[i];a[i]=a[k];a[k]=t;}
    	 }
    	return 1;
    }
    
    void View_TH(int a[],int h[],int k)
    {
    	int i;
    	for(i=1;i<=k;i++) {printf("%4d",a[h[i]]);}
    }
    
    void View_TH1(int a[],int n)
    {
    	int i;
    	printf("\nTAP HOP %d PHAN TU: ",n);
    	for(i=1;i<=n;i++) {printf("%4d",a[i]);}
    	printf("\n");
    }
    
    int ThCuoi(int h[],int n,int k)//Tra ve True neu h[] la to hop cuoi
    {
    	int i;
    	for(i=1;i<=k;i++) if(h[i]!=n-k+i) return(0);//Chua phai la to hop cuoi cung
    	return(1);//La to hop cuoi cung
    }
    
    void ThKeTiep(int h[],int n,int k)
    {
    	if(ThCuoi(h,n,k)) return;
    	int i,j;
    	i=k;
    	//Tim h[i] dau tien tu phai sang trai ma h[i]<n-k+i
    	while(h[i]>=n-k+i) i--;//Dung lai khi a[i]<n-k+i
    
    	h[i]=h[i]+1;
    	for(j=i+1;j<=k;j++) h[j]=h[i]+j-i;
    }
    
    
    void LietkeTH(int a[],int n,int k)
    {
    	int i,m,h[50];
    	m=1;
    	for(i=1;i<=k;i++) h[i]=i;//To hop dau tien la:1,2,...,k
    	printf("\nTo hop thu %2d :",m++);
    	View_TH(a,h,k);  //------------------>>            (*)
    	while(!ThCuoi(h,n,k))
    	 {ThKeTiep(h,n,k);
    		printf("\nTo hop thu %2d :",m++);
    		View_TH(a,h,k);  //----------------->>(**)
    	 }
    }
    
    void run()
    {
    	clrscr();
    	int a[100],n,i,k;
    	if(!Nhap_TH(a,n)) return;
    	View_TH1(a,n);
    	printf("\nLIET KE TO HOP %d CHAP k = ",n);
    	scanf("%d",&k);
    	printf("\nLIET KE CAC TO HOP %d CHAP  %d:\n",n,k);
    	LietkeTH(a,n,k);
    	getch();
    }
    to nguyentuan2: em đã thử rồi, nhưng không thấy có ý nghĩa gì. Thanks

  7. #7
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    có 1 nguyên nhân gây ra hiện tượng này đó là code optimaztion
    không biết trong TC có setting về cái này không, tui chỉ biết là trong VC thì có

    code optimaztion là quá trình tối ưu code, hay loại bỏ những đoạn code dư thừa vô nghĩa, khiến cho code nhanh nhất và ngắn nhất.
    Lý do khiến tui chỉ bạn chèn vào 2 dòng trên là như vậy (đó là 2 dòng dư thừa, nếu có optimaze thì 2 dòng trên sẽ bị loại bạn không thể debug tới đó được), nhưng theo trả lời của bạn "không có ý nghĩa gì" tui cũng không biết được con trỏ debug có vào được không nữa

    Túm lại: nguyên nhân là do code optimaztion, bạn hãy thử chỉnh cấu hình TC sao cho loại bỏ quá trình này hoặc chuyển lên VC thì sẽ giải quyết được

  8. #8
    Ngày gia nhập
    10 2006
    Bài viết
    5

    oa, đúng rồi, cảm ơn bác, bác giải thích thế này thì em hiểu rồi. Để em thử lại trong VC xem. Thanks bro

  9. #9
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Trong Turbo C++ for DOS không có cơ chế compile/link optimize.
    Array trong C bắt đầu từ 0, sao code của cậu bắt đầu từ 1 hết vậy. Sữa lại đi đã.
    Còn vấn đề bp chỉ là do cậu compile và link không đúng thôi, vd compile mà không link, nên khi debug nó vẫn dùng .exe cũ. Code không có vấn đề gì.
    Đã được chỉnh sửa lần cuối bởi TQN : 06-10-2006 lúc 08:43 AM.

  10. #10
    Ngày gia nhập
    10 2006
    Bài viết
    5

    to nguyentuan2: "không có ý nghĩa gì" tức là nó vẫn debug bình thường bác ah. Em đặt breakpoint ở đó vẫn bình thường, ko bị báo invalid breakpoint như trường hợp kia khi dịch. Nhưng dù sao cũng phải thử trong VC đã. ^__^

Các đề tài tương tự

  1. Lỗi debug
    Gửi bởi trungphua trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 24-10-2012, 11:19 PM
  2. Lỗi khi debug chương trình C#: "Visual Studio cannot start debugging because the debug target"
    Gửi bởi Rongcon.com.vn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 09-05-2012, 08:46 PM
  3. [VS 2010]Khi debug bị lỗi không cho chạy debug trước đó
    Gửi bởi buxu trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 08-04-2012, 04:25 PM
  4. lỗi khi chạy debug | fatal error LNK1104: cannot open file "Debug/vd1.exe"
    Gửi bởi duytuyen26 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 8
    Bài viết cuối: 05-04-2012, 08:51 PM
  5. #ifdef DEBUG.......#endif câu lệnh debug
    Gửi bởi RadiRadic trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 07-07-2009, 10:58 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn