Lập trình viên thực sự sử dụng trình gỡ lỗi? [đóng cửa]


15

Nếu lập trình viên có kinh nghiệm thực sự từng sử dụng trình gỡ lỗi, và nếu vậy trong hoàn cảnh nào. Mặc dù trong câu trả lời cho câu hỏi đó tôi đã nói "tháng" trước đây có lẽ tôi có nghĩa là "năm" - tôi thực sự không sử dụng trình gỡ lỗi. Vì vậy, câu hỏi trả lời cụ thể của tôi là trong trường hợp nào, bạn sẽ là một lập trình viên có kinh nghiệm sử dụng trình gỡ lỗi?


14
Nó giống như hỏi liệu các lập trình viên có kinh nghiệm có sử dụng bàn phím không ... Tôi không hiểu kinh nghiệm phải làm gì với nó - bạn có nghĩ họ là Thần và tạo ra mã làm việc hoàn hảo mà không có lỗi từ đầu không? Và ngay cả khi điều đó có ý nghĩa gì với bạn - bạn sẽ ngừng sử dụng trình gỡ lỗi khi bạn cần và sao nói: "Tôi không sử dụng trình gỡ lỗi vì vậy tôi là lập trình viên reaa" ... :) BTW. Tôi nghi ngờ bất kỳ chuyên gia nào cũng sẽ trả lời một câu hỏi như vậy ...

3
@Wooble: câu hỏi cơ bản "làm lập trình viên có kinh nghiệm sử dụng trình gỡ lỗi" là một câu hỏi hay. Nó thực sự làm tôi ngạc nhiên khi nó bắt đầu một cuộc chiến thánh nhỏ.
Kevin

19
Các lập trình viên thực sự, tất nhiên, sử dụng những con bướm
Rein Henrichs

4
Hầu hết các trình gỡ lỗi hiện tại đều lỗi thời, có giao diện nhảm nhí và yêu cầu lập trình viên biết và hiểu các khái niệm và mô hình khó nắm vững, và hiện nay, không công bằng khi mong đợi hầu hết các lập trình viên sử dụng hoặc biết. Do đó, hầu hết các lập trình viên hiện đại, có kinh nghiệm, đều cố gắng học các kỹ năng cần thiết để viết loại mã mà hiếm khi phải gỡ lỗi trong trình gỡ lỗi, để tránh sự đau đớn của trải nghiệm. Vì vậy, "có, họ sử dụng nó" và "càng ít càng tốt"
blueberryfields

7
Các lập trình viên có kinh nghiệm "không sử dụng trình gỡ lỗi" có lẽ đang nghĩ về gdb / SoftICE và chưa bao giờ sử dụng trình gỡ lỗi tích hợp thực tế (và có lẽ không sử dụng IDE cho vấn đề đó). Họ ở đằng sau thời gian thật đau đớn.
BlueRaja - Daniel Pflughoeft

Câu trả lời:


44

Tôi sẽ nói rằng không sử dụng một trình sửa lỗi là một dấu hiệu của thiếu kinh nghiệm. Bước qua từng dòng mã là cách tốt nhất để theo dõi luồng thực thi.


30
Thật lạ là sau hơn 30 năm lập trình trong chương trình hợp ngữ, fortran ,, C, C ++, v.v., tôi cảm thấy không muốn sử dụng nó.

59
Làm một cái gì đó trong một thời gian dài không nhất thiết làm cho bạn giỏi về nó.
ceejayoz

31
Không thể sử dụng trình gỡ lỗi là một dấu hiệu của thiếu kinh nghiệm. Hiểu luồng của chương trình bằng cách chỉ đọc mã là không. Tất nhiên, thỉnh thoảng các lập trình viên có kinh nghiệm sẽ cần trình gỡ lỗi, nhưng nếu bạn có thể đọc mã, thì không cần, và nó sẽ không làm cho quá trình gỡ lỗi nhanh hơn.
GolezTrol

10
@Karl Bielefeldt: Hãy để tôi kể tên một vài ví dụ nổi tiếng về lập trình viên không sử dụng trình gỡ lỗi để gỡ lỗi. Linus Torvalds, tác giả của Linux. Larry Wall, tác giả của Perl. Phần mềm đủ phức tạp cho bạn?
btilly

9
@Neil: bạn dành bao nhiêu thời gian để làm việc với mã của riêng bạn và bao nhiêu mã duy trì được viết bởi người khác? Và đặc biệt, bao nhiêu mã duy trì được viết bởi những người khác không bao giờ được phép ở bất cứ đâu gần một ngôn ngữ lập trình?
Carson63000

28

Tôi sử dụng trình gỡ lỗi thường xuyên, bởi vì tôi làm việc trên một hệ thống lớn và do đó tôi rất tệ. http://steve-yegge.blogspot.com/2007/06/rich-programmer-food.html

Cho dù mã của bạn ngắn và thường xuyên đọc như thế nào, luôn có khả năng nó sẽ có lỗi. http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-gầnly.html

Sai lầm là con người và người ta không bao giờ có thể chứng minh rằng một chương trình là chính xác, vậy tại sao không sử dụng các công cụ như trình gỡ lỗi / kiểm tra tự động để hỗ trợ chúng ta trong công việc khó khăn này?

Nếu mã đủ ngắn, thì các thử nghiệm đơn giản sẽ làm. Ngoài ra, nếu nó ngắn và bạn biết bản chất của lỗi, việc đọc mã có thể là đủ. Tuy nhiên, một khi cơ sở mã lớn, bao gồm nhiều ngôn ngữ được trộn lẫn với nhau, cộng với 3 tầng, thì bạn chỉ cần có phạm vi kiểm tra tốt ở nhiều cấp độ cộng với trình gỡ lỗi rất tốt - nếu không bạn sẽ lãng phí rất nhiều thời gian.

Vì vậy, khi nào tôi không cần một trình sửa lỗi?

Tôi không phải là lập trình viên thông minh nhất, cũng không phải là người có kinh nghiệm nhất, nhưng đôi khi, tôi không cần sử dụng trình gỡ lỗi. Đó là khi:

  • Mã này là của tôi hoặc được viết tốt VÀ
  • Nó được viết bằng ngôn ngữ dễ đọc VÀ
  • Dự án tổng thể là nhỏ.

Khi nào tôi dựa vào trình gỡ lỗi rất nhiều?

  • Trả lời ngắn gọn: thường xuyên .
  • Khi một ứng dụng gặp sự cố. Đặc biệt khi nó được triển khai. Việc cài đặt VS2010 trên máy tính đó có thể tạo ra sự khác biệt giữa "Lỗi không xác định" và FileNotFoundException.
  • Khi thư viện bên thứ 3 gặp sự cố hoặc hoạt động sai.
  • Khi mã được viết kém. Đặc biệt, nếu cùng một tập tin được chạm vào bởi 10 người khác nhau trong 10 năm qua, 7 trong số đó không còn với công ty.
  • Khi dự án lớn
  • Khi mã khá nguyên khối.
  • Khi có một số tầng (GUI, SQL, BL) tham gia.

Lưu ý rằng "trình gỡ lỗi" có thể tham chiếu đến nhiều hơn một công cụ. Tôi sử dụng trình gỡ lỗi Visual Studio, trình gỡ lỗi SQL (chủ yếu cho các procs được lưu trữ) và SQL profiler (để tìm ra SP nào đang được gọi). Tôi có cần các công cụ của tầm cỡ này không? Tôi đang viết một kịch bản Python sysadmin-ish nhanh chóng? Không. Nếu tôi tạo công cụ dựa trên GUI nhỏ của riêng mình? Phụ thuộc. Nếu đó là .Net WinForms - có thể không. Nếu đó là WPF - có.

Điều gì định nghĩa một lập trình viên "thực sự" nào? Một trong đó là nhanh chóng? có kiến ​​thức? Có giỏi thuật toán không? Viết tài liệu tốt? Chỉ khi nào chính xác một người tốt nghiệp vào danh hiệu mới này? Khi nào một người vượt qua dòng ma thuật?

Tôi có thể nói rằng một lập trình viên không bị bẩn tay trong nỗ lực hơn 100 năm hiện tại đã không có cơ hội bị hạ thấp bởi sự phức tạp và giới hạn của chính mình (cũng như thất vọng với chất lượng mã).

Cá nhân tôi cố gắng sử dụng trình gỡ lỗi tốt nhất có sẵn cho tôi và tôi có xu hướng sử dụng nó thường xuyên. Nếu một tác vụ đủ đơn giản và không yêu cầu trình gỡ lỗi - thì tôi không sử dụng nó. Không mất quá nhiều thời gian để tính xem tôi có cần hay không.

...

Bây giờ, về lý thuyết tôi có thể đọc cơ sở mã quá lâu, rằng tôi sẽ chỉ nhận được nó. Tuy nhiên, phương pháp thực hành hoạt động tốt nhất, cộng với tôi thường muốn viết lại mã ngu ngốc mà tôi đang thấy. Thật không may, tôi sẽ mất hơn 10 năm để dọn sạch cơ sở mã mà tôi đang ở. Vì vậy, sử dụng trình gỡ lỗi là bước đầu tiên rõ ràng. Chỉ khi tôi phát hiện ra một trong số 5 triệu dòng mã đang hoạt động, tôi mới quét tệp lên và xuống để cố gắng tìm hiểu xem lớp đó đang làm gì.


+1, câu trả lời xuất sắc, tôi đặc biệt đồng ý với khía cạnh "khi có nhiều tầng liên quan", đó là một điều hiếm khi được đề cập bởi "chỉ đọc mã và tìm lỗi".
Carson63000

Vui mừng bạn có thể đọc toàn bộ.
Công việc

+1 cho câu trả lời tuyệt vời và để kiểm tra định nghĩa của một "lập trình viên thực sự". Việc sử dụng cụm từ này làm cho OP ranh mãnh, thú vị và có khả năng bị viêm (vì hàm ý chê bai hoặc vô căn cứ).
Smandoli

1
"người ta không bao giờ có thể chứng minh rằng một chương trình là chính xác" Điều đó không đúng.
GManNickG

1
@GMan, vui lòng giải thích chi tiết về tuyên bố của bạn. Như tôi đã học, nhiều nỗ lực trước đây để chứng minh tính chính xác của đoạn mã ngắn cho một ngôn ngữ cụ thể đã thất bại, ví dụ như một số lỗi đã được tìm thấy sau khi bằng chứng được hoàn thành (bởi một giáo sư chuyên về các bằng chứng đó). Một số chương trình rất tầm thường có thể được chứng minh là chính xác, tôi cho rằng. Tôi tò mò tìm hiểu góc độ của bạn ở đây.
Công việc

17

"Tôi không thích trình gỡ lỗi. Không bao giờ có, có lẽ sẽ không bao giờ." - Linus Torvald

Mặt khác, anh ấy không có tài khoản Stack Overflow, vì vậy tôi không chắc bạn có quan tâm đến ý kiến ​​của anh ấy không :)


3
Không nhiều người trong chúng ta là Linus Torvalds, đối với phần còn lại của chúng ta chỉ là con người chúng ta cần trình gỡ lỗi.
Nodey The Node Guy

7
hạt nhân không dựa tốt vào trình gỡ lỗi.

7
Vâng, lập trình kernel là một lĩnh vực khác với lập trình không gian người dùng. Tôi thường không đồng ý với ý kiến ​​của Linus về không gian người dùng, nhưng họ chắc chắn đáng kính khi làm việc với không gian hạt nhân.
thay thế

16
"Tôi không thích trình gỡ lỗi" không có nghĩa là "Tôi không sử dụng trình gỡ lỗi." Điều Linus thực sự đã nói là "Tôi không thích trình gỡ lỗi. Không bao giờ, có lẽ sẽ không bao giờ. Tôi sử dụng gdb mọi lúc, nhưng tôi có xu hướng sử dụng nó không phải là một trình gỡ lỗi, mà là một trình phân tách trên steroid mà bạn có thể lập trình." (Tôi biết một số người sẽ cố gắng vặn vẹo điều đó có nghĩa là Linus không sử dụng trình gỡ lỗi, nhưng điều đó không chính xác.)
Kristopher Johnson

6
Có vẻ như Linus Torvalds và tôi không bao giờ đồng ý về bất cứ điều gì.
BlueRaja - Daniel Pflughoeft

12

Vì vậy, câu hỏi trả lời cụ thể của tôi là trong trường hợp nào bạn, với tư cách là một lập trình viên có kinh nghiệm, sẽ sử dụng trình gỡ lỗi?

  • Khi bạn không thể "gỡ lỗi" bằng cách đọc mã của mình.
  • Khi bạn không thể dự đoán giá trị nào thì các biến nhất định có thời gian nhất định.
  • Khi mô hình tinh thần của mã của bạn không phù hợp với đầu ra được cung cấp bởi mã của bạn

Biên tập:

Tôi đã có may mắn / bất hạnh khi không biết cách sử dụng trình gỡ lỗi trong hành trình lập trình của mình. Vì vậy, trong quá khứ tôi đã buộc phải gỡ lỗi mà không có trình gỡ lỗi. Tuy nhiên, sau khi học cách sử dụng trình gỡ lỗi -> Tôi đã trở nên hiệu quả hơn gấp 100 lần trong việc tìm lỗi.


+1 cho "Khi mô hình tinh thần của mã của bạn không phù hợp với đầu ra được cung cấp bởi mã của bạn"
người dùng

8

Để đưa ra một quan điểm hơi khác với các câu trả lời hiện tại; Là một kỹ sư phần mềm nhúng làm việc trên các hệ thống thường có thành phần thời gian thực, tôi hiếm khi sử dụng trình gỡ lỗi.

Đôi khi, trình gỡ lỗi có thể là một công cụ tuyệt vời và bất cứ khi nào tôi có thể xây dựng và chạy mã trên máy tính để bàn thì tôi sẽ luôn sử dụng trình gỡ lỗi.

Trên chip, với các ràng buộc thời gian thực, sau đó có một gánh nặng lớn liên quan đến việc cố gắng sử dụng trình gỡ lỗi. Ngay khi bạn tạm dừng thực thi, bạn có khả năng buồn bã, có thể gây tử vong, thời gian của phần còn lại của hệ thống. Nói chung trên chip, printf trong mã không quan trọng và IO vẫy trong mã quan trọng thời gian là công cụ tốt nhất và thực sự đơn giản nhất. Nó không tốt như trình gỡ lỗi, nhưng rẻ hơn nhiều khi làm việc với một hệ thống thực sự.


1
bạn có thể muốn điều tra các bảng gỡ lỗi dựa trên phần cứng
Steven A. Lowe

@Steven cảm ơn; Thật không may, trong khi một số hệ thống tôi làm việc có hỗ trợ phần cứng phù hợp thì những hệ thống khác thì không. Mặc dù chúng ta thường có tùy chọn máy phân tích logic, nhưng điều này có xu hướng thậm chí còn đắt hơn về mặt thời gian.
Luke Graham

Tôi hoàn toàn ngược lại. Tôi sử dụng trình gỡ lỗi thường xuyên hơn trên các hệ thống nhúng. Tôi đồng ý về nó làm đảo lộn thời gian, mặc dù. Phải mất một số lượng lớn nỗ lực để lọc ra và / hoặc giảm thiểu các thay đổi gây ra bằng cách đưa trình gỡ lỗi vào vòng lặp.
Karl Bielefeldt

7

Tôi nghĩ rằng các lập trình viên có kinh nghiệm hầu như chỉ sử dụng trình gỡ lỗi, khi họ cần thiết. Cách nào tốt hơn để theo dõi một lỗi hơn là thực sự tuân theo việc thực thi mã ...

Bạn có theo giả định rằng Skeets của thế giới không phạm sai lầm hay chỉ biết mọi thứ? Tất cả trừ những chương trình tầm thường nhất đều hành xử theo những cách bất ngờ trong một số trường hợp. Nó được đưa ra rằng các vấn đề sẽ phải được điều tra. Vì vậy, các lựa chọn là sử dụng các câu lệnh in, ở một đầu của phổ hoặc xem xét xem điều gì đã xảy ra, mặt khác, hoặc nhìn vào giữa khi mã thực thi và tìm hiểu điều gì đang xảy ra.

Có lẽ một cách tốt hơn để suy nghĩ về nó là các lập trình viên có kinh nghiệm biết khi nào nên sử dụng một trình gỡ lỗi. Trong mã với một vài phụ thuộc nhìn vào dấu vết ngăn xếp có lẽ là đủ để tìm ra điều gì sai. Nhưng có những kịch bản phức tạp khi mã của bạn hoạt động với mã khác và bạn cần một trình gỡ lỗi để xem nội dung bạn không viết.


4
Chà, đây chính xác là những gì tôi đang cố gắng điều tra - Tôi là một lập trình viên cực kỳ có kinh nghiệm và tôi không bao giờ sử dụng nó.

5
@neil, có lẽ bạn không có nhu cầu. Hãy yên tâm, thời gian sẽ đến nơi trình gỡ lỗi sẽ là cách đơn giản nhất để đi đến tận cùng của vấn đề, cho dù bạn có thực sự kết thúc bằng cách sử dụng một ....
hvgotcodes

Tôi có thể đọc những thứ tôi không viết quá. Và nếu tôi không thể, nó được sử dụng vì nó là mã xấu. Trong các trường hợp khác, tôi sử dụng trình gỡ lỗi.
GolezTrol

Nếu ngôn ngữ bạn sử dụng hỗ trợ các trường hợp ngoại lệ và nếu bạn đang sử dụng chúng + khung ghi nhật ký một cách thích hợp (ví dụ log4j hoặc đại loại như thế), bạn sẽ luôn kết thúc bằng dấu vết ngăn xếp chỉ ra dòng lỗi của mình. 99% đó là một ngoại lệ con trỏ null mà bạn không mong đợi. Điều gì khác là một trình sửa lỗi sẽ nói với bạn? Bây giờ, khi tôi đang lập trình trong c, có những thứ mà bạn đơn giản không thể tìm thấy nếu không có trình gỡ lỗi (ví dụ như tham nhũng stack). Nhưng những kiểu đó không còn xảy ra với ngôn ngữ cấp cao nữa.
Kevin

1
@kevin, đúng rồi, tôi nghĩ có một loại vấn đề giữa hai vấn đề đó trong đó trình gỡ lỗi là cách tự nhiên nhất để đi đến tận cùng của một vấn đề. Có lẽ tôi muốn thấy các thuộc tính động được đặt trên một đối tượng trong một khung ngôn ngữ động như grails. Có lẽ tôi muốn xem chính xác nơi mà một cái gì đó tôi nghĩ không phải là null được tạo ra (NPE cho bạn biết ngoại lệ ở đâu, chứ không phải tại sao thứ đó là null). Có lẽ tôi muốn trình gỡ lỗi của mình tạm dừng ngoại lệ để tôi có thể thấy sự kết hợp mã nào đã gây ra ngoại lệ, không chỉ là nó xảy ra trong stacktrace.
hvgotcodes

4

Tôi không, và tôi đã lập trình được hơn 10 năm. Tôi đã từng, khi tôi lập trình trong c / c ++. Bây giờ tôi lập trình trong java. Sự thật là nếu bạn đang đăng nhập chính xác, bạn sẽ kết thúc với một dấu vết ngăn xếp đủ cho hầu hết các nhà phát triển lành nghề. Ngoài ra nếu bạn đang viết các bài kiểm tra đơn vị (tốt) và kiểm tra chức năng, loại bỏ cả một lớp lỗi.


Nếu nó làm rõ hơn, tôi biết rất nhiều lập trình viên java sử dụng trình gỡ lỗi. Họ hầu hết phải ra khỏi trường.
Kevin

1
stacktraces không hiển thị dữ liệu - bạn phải tự thêm thông tin đó - nhưng sau đó chúng là vàng nguyên chất.

1
@ Thorbjørn: Thực tế, họ có thể hiển thị dữ liệu: xem mô-đun cgitb của Python . (CGI trong tên chủ yếu là dấu tích, mục đích ban đầu của mô-đun là để hiển thị dấu vết ngăn xếp có thể sử dụng được khi CGI bị hỏng.) khung quan tâm. cgitb.enable(format='text')Dù sao thì tôi cũng yêu .
SamB

Tôi không thực sự sử dụng trình gỡ lỗi và tôi sử dụng C ++ ..
Nikko

@SamB Kevin đã nói về Java, điều không thể với điều đó

4

Ai quan tâm? Những gì tôi muốn biết là việc sử dụng một trình gỡ lỗi sẽ ngăn tôi trở thành một lập trình viên tốt hơn trong dài hạn? Có thể các trình sửa lỗi có chất lượng thấp hơn khi nhiều nhà phát triển có kinh nghiệm bắt đầu nên chúng là một trở ngại. Đó có phải là một cái nạng ngăn cản sự hiểu biết sâu sắc hơn?

Một số lập trình viên, có lẽ tốt hơn so với phần còn lại của chúng tôi, thấy cần một trình gỡ lỗi và xây dựng một trình lập trình (Không biết ai đã tạo ra cái đầu tiên.). Tôi chắc chắn rằng họ đã làm việc hiệu quả hơn nhờ nó. Tôi nghi ngờ động lực là để cho phép những người chết ít hơn viết mã.


3

Ít khi.

Các phương pháp của bạn phải nhỏ / đủ đơn giản để được biên dịch và chạy theo tâm trí của bạn, các bài kiểm tra đơn vị sẽ bao gồm chức năng. Nếu bạn tìm thấy một lỗi, viết một bài kiểm tra. Chạy nó, sửa nó.

Tôi chỉ có xu hướng sử dụng trình gỡ lỗi khi tôi có hành vi bất ngờ từ mã không thể kiểm chứng, như khung công tác ASP.NET.


3
Có một số người ghét thực sự trong chủ đề này ...

2
KHÔNG có lý do để bỏ phiếu này - anh ấy đúng.
wadesworld

11
-1 bởi vì tuyên bố này giống như nói cách kiếm tiền tại Vegas là chỉ cần giành chiến thắng. Điều đó không phản ánh đúng thực tế của tình huống và tuyên bố rằng tất cả các mã sẽ đơn giản chỉ tồn tại trong các vấn đề nhỏ bị cô lập. Thêm vào đó, yêu cầu "chạy nó, sửa nó" hoàn toàn bỏ qua cách bạn tiến hành sửa nó. Tôi sẽ để cho nó trượt nhưng sau đó nói bóng gió rằng tất cả những người không đồng ý làm cho nó có giá trị hạ thấp.
whatsisname

2
-1: "Các phương thức của bạn phải nhỏ / đủ đơn giản để được biên dịch và chạy theo tâm trí của bạn" bị tách rời khỏi thực tế. Điều đó giống như nói một hàm dài hơn 20 dòng là quá dài. Vô lý.
John Dibling

3

Trong Smalltalk, tôi phát triển gần như hoàn toàn trong trình gỡ lỗi:

  1. Viết một bài kiểm tra mà tôi biết sẽ thất bại.
  2. Chạy thử nghiệm. Khi nó thất bại, trình gỡ lỗi bật lên.
  3. Viết, trong trình gỡ lỗi, mã cần thiết để thực hiện kiểm tra vượt qua.
  4. Tiếp tục thực hiện.
  5. Nếu tôi bật đèn xanh, hãy đến bước 1 với bài kiểm tra thất bại mới. Nếu không, trong trình gỡ lỗi tìm ra những gì tôi đã làm sai và sửa nó.

2

Tôi sử dụng một trình sửa lỗi khi tôi cần. Đó không phải là hàng ngày, nhưng nó xảy ra đôi khi. Đôi khi tốt hơn là bước qua mã để xem chính xác những gì xảy ra.

Tôi phải thừa nhận tôi sử dụng trình gỡ lỗi ngày càng ít. Tôi đã phát triển ở Delphi hơn 10 năm. Tôi cũng viết các thủ tục được lưu trữ trong PL / SQL. Kể từ vài tháng, tôi cũng là một nhà phát triển PHP.

Tôi chủ yếu sử dụng trình gỡ lỗi trong một trong hai trường hợp này nếu tôi tìm thấy một đoạn mã tối nghĩa được viết từ nhiều năm trước và tôi cần sửa đổi nó. Đôi khi nó giúp tìm ra cách chính xác một chương trình hoạt động nếu khó đọc mã. Trong PHP hầu như không bao giờ cần thiết, nhưng trong Delphi, dựa trên sự kiện, đôi khi nó giúp ích khi bạn có một khung công tác phức tạp.

Nhưng như bạn nói, sử dụng trình gỡ lỗi là một ngoại lệ. Hầu hết các vấn đề được giải quyết bằng cách chỉ đọc mã và sửa bất kỳ lỗi nào bạn (hoặc người khác) đã mắc phải.

Nhưng điều đó đi cho bước qua mã. Tôi thường sử dụng ngăn xếp cuộc gọi khi có ngoại lệ xảy ra và thỉnh thoảng tôi đặt một điểm dừng ở đâu đó để kiểm tra một biến. Nhưng gần như luôn luôn trong một đoạn mã cần tái cấu trúc kỹ lưỡng.


2

Tôi thỉnh thoảng mã không có trình gỡ lỗi, nhưng chỉ khi bị buộc phải ở gunpoint, tức là. di sản nhúng gunge trên 8051 hoặc Z80.

IMHO, bạn cần một trình gỡ lỗi và đăng nhập vào bất kỳ công việc phức tạp nào. Một lần không phải là một thay thế cho khác. Ví dụ, một hệ thống ghi nhật ký không thể trợ giúp nếu ứng dụng nhét vào trình điều khiển, ví dụ, điều duy nhất mà mã có thể làm là tương tác với phần cứng và thiết lập một semaphore.

Trình gỡ lỗi không thể giúp khắc phục lỗi hệ thống trong đó các ứng dụng hoạt động tốt theo cách bạn đã viết, nhưng hệ thống vẫn không hoạt động do một số lỗi giao thức comms không liên tục.

Vì vậy, tôi cần trình gỡ lỗi để loại bỏ các lỗi ngu ngốc, chói lóa và phần cứng. Tôi cần đăng nhập tốt để bắt lỗi tích hợp hệ thống không liên tục.

Tôi phải có cả hai - tôi cần tất cả sự giúp đỡ tôi có thể nhận được!


2
z80 đủ lớn cho trình gỡ lỗi. CP / M đã có ZSID.

1

Tôi chỉ sử dụng trình gỡ lỗi khi các bước này không thành công:

  1. Nhận lỗi tái sản xuất. Hãy suy nghĩ. Đây thường là tất cả những gì cần thiết.
  2. Kiểm tra bất kỳ dấu vết ngăn xếp và nhật ký.
  3. Thêm đăng nhập xung quanh mã vi phạm.

Các bước này chăm sóc 95% của tất cả các trường hợp. Điều đó có nghĩa là tôi hiếm khi sử dụng trình gỡ lỗi và khi tôi làm điều đó, nó có xu hướng cung cấp cho tôi quá nhiều thông tin và tôi bị sa lầy vào các chi tiết không liên quan. Điều này đặc biệt đúng nếu làm việc trên một hệ thống đa luồng, thời gian thực.

Vì vậy, các báo cáo đăng nhập được đặt một cách thận trọng đi một chặng đường dài.


1

Có thể chỉ đơn giản là các lập trình viên rất có kinh nghiệm cũng giống như các lập trình viên rất già, và họ đã học lập trình, và hình thành thói quen của họ, trở lại khi trình gỡ lỗi không phải lúc nào cũng có sẵn, và đôi khi không tốt lắm?

Nếu bạn thực sự giỏi trong việc gỡ lỗi printf (và trở lại những năm tám mươi, chúng tôi không có nhiều sự lựa chọn ngoài việc trở nên thực sự giỏi về nó), có lẽ một trình gỡ lỗi không thêm nhiều như vậy.


0

Đó là một câu hỏi về sự lựa chọn cá nhân.

Thành thật tôi nghĩ rằng trình gỡ lỗi rất hữu ích trong các tình huống xác nhận trong đó nó giúp ích rất nhiều cho việc biết những gì trên ram của bạn tại bất kỳ bước nào trong quá trình thực thi chương trình của bạn.

Tiện ích chính của trình gỡ lỗi là tạm dừng chương trình mà không có chương trình được thiết kế để tự dừng lại: tính năng này khá quan trọng.

Ngoài 2 tính năng đó, tôi không nghĩ trình gỡ lỗi là thực sự cần thiết; bất kỳ chương trình phức tạp nào bạn thực hiện nên có một số chế độ "dài dòng", nghĩa là nói mọi thứ nó đang thực hiện với printf hoặc std :: cout, lựa chọn nào đã thực hiện và rất nhiều tham số khác.

Chỉ cần tưởng tượng bạn tạo một chương trình và người dùng có vấn đề khi sử dụng nó: làm thế nào để biết liệu anh ta có đang sử dụng nó theo cách nó được thiết kế để sử dụng hay không, nếu điều anh ta phàn nàn có thể là một lỗi?

Trình gỡ lỗi giống như hệ thống lái điện cho xe hơi của bạn: sẽ thoải mái hơn khi có một chiếc, nhưng nó sẽ không làm cho ổ đĩa của bạn tốt hơn.

Progamming là về thiết kế và logic, cách các công cụ có thể hỗ trợ bạn trong việc theo dõi công cụ không giúp bạn trở thành một lập trình viên tốt hơn.

Trình gỡ lỗi cộng là hữu ích cho các ngôn ngữ được biên dịch, ít hơn nhiều đối với các ngôn ngữ không được chú ý.


2
Tôi không hiểu những gì được biên dịch so với diễn giải phải làm với nó.
Michael Burr

câu hỏi hay: tôi cũng vậy.
jokoon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.