JavaScript is required to for searching.
Skip Navigation Links
Exit Print View
Oracle Solaris Studio 12.3: Debugging a Program With dbx     Oracle Solaris Studio 12.3 Information Library
search filter icon
search icon

Document Information


1.  Getting Started With dbx

2.  Starting dbx

3.  Customizing dbx

4.  Viewing and Navigating To Code

5.  Controlling Program Execution

6.  Setting Breakpoints and Traces

7.  Using the Call Stack

8.  Evaluating and Displaying Data

9.  Using Runtime Checking

10.  Fixing and Continuing

11.  Debugging Multithreaded Applications

12.  Debugging Child Processes

13.  Debugging OpenMP Programs

14.  Working With Signals

15.  Debugging C++ With dbx

16.  Debugging Fortran Using dbx

Debugging Fortran

Current Procedure and File

Uppercase Letters

Sample dbx Session

Running the Sample dbx Session

Debugging Segmentation Faults

Using dbx to Locate Problems

Locating Exceptions

Tracing Calls

Working With Arrays

Fortran 95 Allocatable Arrays

Showing Intrinsic Functions

Showing Complex Expressions

Showing Interval Expressions

Showing Logical Operators

Viewing Fortran 95 Derived Types

Pointer to Fortran 95 Derived Type

Object Oriented Fortran

Allocatable Scalar Type

17.  Debugging a Java Application With dbx

18.  Debugging at the Machine-Instruction Level

19.  Using dbx With the Korn Shell

20.  Debugging Shared Libraries

A.  Modifying a Program State

B.  Event Management

C.  Macros

D.  Command Reference


Debugging Fortran

The following tips and general concepts are provided to help you while debugging Fortran programs. For information on debugging Fortran OpenMP code with dbx, see Interacting With Events.

Current Procedure and File

During a debug session, dbx defines a procedure and a source file as current. Requests to set breakpoints and to print or set variables are interpreted relative to the current function and file. Thus, stop at 5 sets different breakpoints, depending on which file is current.

Uppercase Letters

If your program has uppercase letters in any identifiers, dbx recognizes them. You need not provide case-sensitive or case-insensitive commands, as in some earlier versions.

Fortran 95 and dbx must be in the same case-sensitive or case-insensitive mode:

Sample dbx Session

The following examples use a sample program called my_program.

Main program for debugging, a1.f:

    PARAMETER ( n=2 )
    REAL twobytwo(2,2) / 4 *-1 /
    CALL mkidentity( twobytwo, n )
    PRINT *, determinant( twobytwo )

Subroutine for debugging, a2.f:

    SUBROUTINE mkidentity ( array, m )
    REAL array(m,m)
    DO 90 i = 1, m
        DO 20 j = 1, m
            IF ( i .EQ. j ) THEN
            array(i,j) = 1.
            array(i,j) = 0.
            END IF
20        CONTINUE

Function for debugging, a3.f:

    REAL FUNCTION determinant ( a )
    REAL a(2,2)
    determinant = a(1,1) * a(2,2) - a(1,2) / a(2,1)

Running the Sample dbx Session

  1. Compile and link with the- g option.

    You can do this in one or two steps.

    Compile and link in one step, with -g:

     demo% f95 -o my_program -g a1.f a2.f a3.f

    Or, compile and link in separate steps:

     demo% f95 -c -g a1.f a2.f a3.f
     demo% f95 -o my_program a1.o a2.o a3.o
  2. Start dbx on the executable named my_program.
     demo% dbx my_program
     Reading symbolic information…
  3. Set a simple breakpoint by typing stop in subnam, where subnam names a subroutine, function, or block data subprogram.

    To stop at the first executable statement in a main program.

     (dbx) stop in MAIN
     (2) stop in MAIN

    Although MAIN must be all uppercase, subnam can be uppercase or lowercase.

  4. Type the run command, which runs the program in the executable files named when you started dbx.
     (dbx) run
     Running: my_program
     stopped in MAIN at line 3 in file "a1.f"
         3         call mkidentity( twobytwo, n )

    When the breakpoint is reached, dbx displays a message showing where it stopped, in this case, at line 3 of the a1.f file.

  5. To print a value, type the print command.

    Print value of n:

     (dbx) print n
     n = 2

    Print the matrix twobytwo; the format might vary:

     (dbx) print twobytwo
     twobytwo =
        (1,1)       -1.0
        (2,1)       -1.0
        (1,2)       -1.0
        (2,2)       -1.0

    Print the matrix array:

    (dbx) print array
    dbx: "array" is not defined in the current scope

    The print fails because array is not defined here, only in mkidentity.

  6. To advance execution to the next line, type the next command.

    Advance execution to the next line:

    (dbx) next
    stopped in MAIN at line 4 in file "a1.f"
        4             print *, determinant( twobytwo )
    (dbx) print twobytwo
    twobytwo =
        (1,1)       1.0
        (2,1)       0.0
        (1,2)       0.0
        (2,2)       1.0
    (dbx) quit

    The next command executes the current source line and stops at the next line. It counts subprogram calls as single statements.

    Compare the next command with the step command. The step command executes the next source line or the next step into a subprogram. If the next executable source statement is a subroutine or function call, then:

    • The step command sets a breakpoint at the first source statement of the subprogram.

    • The nextcommand sets the breakpoint at the first source statement after the call, but still in the calling program.

  7. To quit dbx, type the quit command.