首页 | 本学科首页   官方微博 | 高级检索  
相似文献
 共查询到20条相似文献,搜索用时 15 毫秒
1.
A common debugging strategy involves reexecuting a program (on a given input) over and over, each time gaining more information about bugs. Such techniques can fail on message-passing parallel programs. Because of nondeterminacy, different runs on the given input may produce different results. This nonrepeatability is a serious debugging problem, since an execution cannot always be reproduced to track down bugs. This paper presents a technique for tracing and replaying message-passing programs. By tracing the order in which messages are delivered, a reexecution can be forced to deliver messages in their original order, reproducing the original execution. To reduce the overhead of such a scheme, we show that the delivery'order of only messages involved inraces need be traced (and not every message). Our technique makes run-time decisions to detect and trace racing messages and is usuallyoptimal in the sense that the minimal number of racing messages is traced. Experiments indicate that only 1% of the messages are often traced, gaining a reduction of two orders of magnitude over traditional techniques that trace every message. These traces allow an execution to be reproduced any number of times for debugging. Our work is novel in that we adaptively decide what to trace, and trace only those messages that introduce nondeterminacy. With our strategy, large reductions in trace size allow long-running programs to be replayed that were previously unmanageable. In addition, the reduced tracing requirements alleviate tracing bottle-necks, allowing executions to be debugged with substantially lower execution time overhead.This work was supported in part by National Science Foundation grants CCR-8815928 and CCR-9100968, Office of Naval Research grant N00014-89-J-1222, and a grant from Sequent Computer Systems, Inc.  相似文献   

2.
Spinellis  D. 《Software, IEEE》2006,23(3):98-99
The testing, diagnostic, and repair equipment of many professions is horrendously expensive. Assuming that the bug-finding systems the author discussed that program code a clean bill of health, our next alternatives for productively pinpointing errors that have crept into our code are debuggers or logging instrumentation. Our toolbag is full of useful debugging tools. Being an expert user of a debugger and a logging framework is a sign of professional maturity.  相似文献   

3.
Automated debugging attempts to locate the reason for a failure. Delta debugging minimizes the difference between two inputs, where one input is processed correctly while the other input causes a failure, using a series of test runs to determine the outcome of applied changes. Delta debugging is applicable to inputs or to the program itself, as long as a correct version of the program exists. However, complex errors are often masked by other program defects, making it impossible to obtain a correct version of the program through delta debugging in such cases. Iterative delta debugging extends delta debugging and removes a series of defects step by step, until the originally unresolved defect is isolated. The method is automated and managed to localize a bug in some real-life examples.  相似文献   

4.
The paper describes a study that explored the relationship of program slicing to (1) code understanding gained while debugging, and to (2) a debugger's ability to localize the program fault area. The study included two experiments. The first experiment compared the program understanding abilities of two classes of debuggers: those who slice while debugging and those who do not. For debugging purposes, a slice can be thought of as a minimal subprogram of the original code that contains the program faults. Those who only examine statements within a slice for correctness are considered slicers; all others are considered non-slicers. Using accuracy of subprogram construction as a measure of understanding, it was determined that slicers have a better understanding of the code after debugging. The second experiment compared debugger fault localization abilities before and after a training session on how to use slicing in debugging. Using time as a measure of ability, it was shown that slicing while debugging improves a debugger's ability to localize the program fault area.  相似文献   

5.
吕律 《计算机工程》2009,35(17):58-59
在本体设计过程中容易出现逻辑错误,利用现有本体除错工具难以诊断并修正此类错误。针对该问题提出一种新的交互式本体除错方法。通过分析unsatisfiable concept自动生成相关问题,基于用户对问题的回答自动修复错误本体。实验结果表明,该方法能利用少量问题实现修复目的。  相似文献   

6.
Two experiments were conducted to investigate the relationship between planning and debugging and the effect of program authorship on debugging strategies. Three groups of participants with different programming experiences were recruited. In the first experiment, the participants were asked to develop and debug their self-generated program whereas in the second experiment, they were asked to debug an otherwritten program where some logical errors were planted. Situated cognition approach, being an emergent cognitive paradigm, furnishes an alternative framework to understand the problems of interest. Deweyan notion of inquiry and Gibsonian theory of affordance are of particular relevance. The results show that planning is ineffective for debugging, irrespective of the programming expertise level and program authorship. Besides, situated debugging is demonstrated to be the preferred strategy which is not significantly related to the program authorship. A model of planning for program debugging and a theory of two-faceted transparency are postulated for explicating the observations.  相似文献   

7.
Programmers spend considerable time debugging code. Symbolic debuggers provide some help but the task remains complex and difficult. Other than breakpoints and tracing, these tools provide little high-level help. Programmers must perform many tasks manually that the tools could perform automatically, such as finding which statements in the program affect the value of an output variable for a given test case, and what was the value of a given variable when the control last reached a given program location. If debugging tools provided explicit support for these tasks, the debugging process could be automated to a significant extent. In this paper we present a debugging model, based on dynamic program slicing and execution backtracking techniques, that easily lends itself to automation. This model is based on experience with using these techniques to debug software. We also present a prototype debugging tool, SPYDER, that explicitly supports the proposed model, and with which we are performing further debugging research.  相似文献   

8.
Sren Lauesen 《Software》1979,9(1):51-63
Debugging is efficient if it detects all program errors in a short time. This paper discusses several techniques for improving debugging efficiency. Attention is given both to the initial debugging and to acceptance testing in the maintenance stage. A main decision is whether to use top-down or bottom-up debugging, and it is suggested that top-down debugging is more efficient if combined with some of the other techniques. All the techniques shown are independent of any particular language or debug software.  相似文献   

9.

Two experiments were conducted to investigate the relationship between planning and debugging and the effect of program authorship on debugging strategies. Three groups of participants with different programming experiences were recruited. In the first experiment, the participants were asked to develop and debug their self-generated program whereas in the second experiment, they were asked to debug an otherwritten program where some logical errors were planted. Situated cognition approach, being an emergent cognitive paradigm, furnishes an alternative framework to understand the problems of interest. Deweyan notion of inquiry and Gibsonian theory of affordance are of particular relevance. The results show that planning is ineffective for debugging, irrespective of the programming expertise level and program authorship. Besides, situated debugging is demonstrated to be the preferred strategy which is not significantly related to the program authorship. A model of planning for program debugging and a theory of two-faceted transparency are postulated for explicating the observations.  相似文献   

10.
Most extant debugging aids force their users to think about errors in programs from a low-level, unit-at-a-time perspective. Such a perspective is inadequate for debugging large complex systems, particularly distributed systems. In this paper, we present a high-level approach to debugging that offers an alternative to the traditional techniques. We describe a language, edl, developed to support this high-level approach to debugging and outline a set of tools that has been constructed to effect this approach. The paper includes an example illustrating the approach and discusses a number of problems encountered while developing these debugging tools.  相似文献   

11.
C. A. Witschorik 《Software》1983,13(8):727-743
Real-time computer systems can be difficult to test when their timing characteristics influence the occurrence of problems. Because of this, tools for debugging real-time systems must account for the interference that they produce in the system they are monitoring. The debugging monitor for the Bell System 1A processor is an example of just such a tool. This paper examines the 1A processor debugging monitor, focusing on the division of the monitor into three separate devices: a hardware monitor that allows autonomous debugging; a resident monitoring program that allows debugging with a minimal interference to normal timing; and a separate mini-computer monitor that offers extended capability at the expense of unrestricted interference.  相似文献   

12.
《Computers & Education》1999,32(2):165-179
This study reported the research findings on improving programming skills of novice programmers by way of debugging practices. There were two objectives of the debugging training: (1) to uncover and to correct any misconceptions of the programmers; and (2) to improve the debugging abilities of the programmers. To meet these objectives, a model of debugging practices, DebugIt, was presented. The proposed model called for supervised debugging practices on short programs involving frequently committed programming errors. A system, DebugIt:Loop, was developed specifically for debugging practices on programs with loop related errors. Two sets of experiments were conducted with 26 college students and 46 senior high school students enrolled in introductory Pascal courses. For each experiment, students were randomly assigned into the experimental group (using DebugIt:loop for debugging practice) and the control group (using traditional programming practices). A posttest was administered to compare the debugging and errorless programming abilities among the students in the two groups. The statistical procedure of an ANCOVA was used to analyze the gathered data. The results showed that this model of supervised debugging practices was effective in improving novice programmers' programming skills.  相似文献   

13.
Two stochastic models on the growth of software errors under an imperfect debugging environment are discussed. The errors that are introduced into the software during the developmental phase are called primary errors, and these are assumed to be distributed according to a non-homogeneous Poisson process. Imperfect debugging of primary errors generates further errors, called secondary errors, into the system. These secondary errors are assumed to be generated according to a cluster point process. Two types of cluster point processes are considered, the Neyman-Scott and the Bartlett-Lewis cluster processes. The mean value functions for the number of primary and secondary errors are developed for both models and we use these to obtain some important reliability measures. We also develop a cost model and obtain its corresponding optimal release policies. Finally, we discuss parameter estimation based on the criterion of maximum likelihood and present a numerical example.  相似文献   

14.
Joseph L. Steffen 《Software》1984,14(4):323-334
Debugging tools are usually highly machine and compiler dependent programs that are either impossible to move or require a tremendous effort to move to another machine. This paper describes Ctrace, a portable debugging tool for the C language that provides the same, easy-to-use debugging environment on all machines. A similar debugger can be written for any language. Ctrace is a preprocessor that inserts source language debugging code into the program before compilation that, at execution time, prints the text of each source language statement along with the values of variables it uses and modifies. Redundant trace output from program loops is detected and eliminated. Tracing can be limited to selected statements or functions. Ctrace has shown its usefulness and popularity by its installation on over 200, computers at Bell Laboratories. It has proven its portability by being used to test software on four different operating systems and nine different processors.  相似文献   

15.
Marek Gondzio 《Software》1987,17(3):215-226
Every microprocessor-based system needs powerful debugging tools. Debugging power strongly depends on a mechanism of control exchange between the debugger and an application program. Several implementation methods of such a mechanism are briefly described and compared in this paper. It is shown that conditional breakpoints facilitate a semantics-oriented approach to program debugging. Some debugging techniques derived from elementary control-exchange mechanisms are proposed. Most of the techniques discussed are implemented in the MD-86 debugger designed for the Intel 8086 microprocessor. The debugger itself is also briefly described.  相似文献   

16.
Schneidewind  N.F. 《Computer》1977,10(4):47-53
Two particularly nagging ailments faced by the computer industry today are the high cost and late delivery of software.1,2The symptoms usually surface during software debugging, testing, and integration; but the ailments themselves can most often be traced back to the program design phase and the structural characteristics of the program. The significance of program structural characteristics has been recognized for some time, as witnessed by the emergence of structured programming,3,4,a methodology that sets out to (1) reduce programming errors; (2) design an understandable, readable, and therefore maintainable program; (3) increase our ability to detect errors; and (4) prove, if only informally, that the program is correct. But there is another tool available that has usually been overlooked in the software development process: simulation.  相似文献   

17.
David H. Hanson 《Software》1978,8(2):115-129
An event association facility for the SNOBOL4 programming language is described. This facility permits the execution of a programmer-defined function to be associated with the occurrence of a specified event. The events with which associations can be made are those applicable to program debugging. Associations can be made with events such as variable referencing, statement execution, program interruption, function call and return, and execution-time errors. By making event associations available at the source-language level, debugging aids can be written in SNOBOL4 itself, using the full capabilities of that language. As illustrated by several examples, this approach facilitates the implementation of simple yet powerful debugging aids written in the same language as the programs to be debugged. Event associations provide a mechanism for the unification of the existing SNOBOL4 debugging facilities, and a basis for the addition of other events. The implementation of event associations is also described.  相似文献   

18.
Program errors are hard to find because of the cause-effect gap between the instant when an error occurs and when the error becomes apparent to the programmer. Although debugging techniques such as conditional and data breakpoints help in finding errors in simple cases, they fail to effectively bridge the cause-effect gap in many situations. This paper proposes two debuggers that provide programmers with an instant error alert by continuously checking inter-object relationships while the debugged program is running. We call such tool a dynamic query-based debugger. To speed up dynamic query evaluation, our debugger implemented in portable Java uses a combination of program instrumentation, load-time code generation, query optimization, and incremental reevaluation. Experiments and a query cost model show that selection queries are efficient in most cases, while more costly join queries are practical when query evaluations are infrequent or query domains are small. To enable query-based debugging in the middle of program execution in a portable way, our debugger performs efficient Java class file instrumentation. We call such debugger an on-the-fly debugger. Though the on-the-fly debugger has a higher overhead than a dynamic query-based debugger, it offers additional interactive power and flexibility while maintaining complete portability.  相似文献   

19.
A high level of complexity is involved in program dynamics. A number of tools have been developed to assist the programmer in mastering this complexity in the various phases of software development. However, these tools are specifically oriented towards the monitoring of particular aspects of program behaviour. This paper presents the results of a systematic attempt at defining the user interface to an environment for program debugging, program performance evaluation and program structure analysis. This environment can be used to implement many common debugging techniques, and to evaluate important program performance indexes and program structure statistics. It supports both sequential and concurrent block-oriented high-level languages.  相似文献   

20.
In the event-action model of interactions between the debugging system and the program being debugged, an event will occur on the evaluation of a conditional defined in terms of the program activity if the evaluation yields the value true, and an action is an operation performed by the debugging system on the occurrence of an event. This paper presents a set of mechanisms for expressing conditionals at different levels of abstraction. At the lowest level, the authors have the simple conditionals, which can be expressed in terms of the values of the program entities and of the execution of the program statements. Simple conditionals can be grouped to form higher-level compound conditionals, which can be expressed in terms of the state and flow histories. The paper shows that the proposed abstraction mechanisms are powerful tools for monitoring program activity. They adequately support different debugging techniques, and offer the user a considerable degree of control over the debugging experiment  相似文献   

设为首页 | 免责声明 | 关于勤云 | 加入收藏

Copyright©北京勤云科技发展有限公司  京ICP备09084417号