I have a INT/GNT Project consisting of a two files: Program1.cbl and SubRoutine1.cbl. I call SubRoutine1 from Program1 with a simple CALL statement.
Now, when I debug it doesn't matter if I press F10 or F11; the debugger will step into the sub routine in both cases. Is it supposed to be that way?
You need to open the project properties, open the Debug settings, and change the Start project output setting from the subprogram to the calling program.

 
                
     
                                    
            You need to open the project properties, open the Debug settings, and change the Start project output setting from the subprogram to the calling program.

 
The example given above was wrong; that example works. But this one won't. If you press F10 on the line below *> 1 then the debugger will stop on the line below *> 2. The problem seems to occur when a subroutine calls Another subroutine. But maybe this is by design?
 
Program1.cb
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROGRAM1.
 
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 W23-SR1-PARAM.
         05 W23-SR1-FILENAME PIC X(255).
       01 W23-SR1-ERROR  PIC 9(4) COMP-X.
 
       PROCEDURE DIVISION.
           INITIALIZE W23-SR1-PARAM.
           INITIALIZE W23-SR1-ERROR.
 
           MOVE "TEST" TO W23-SR1-FILENAME.
 
           *> 1
           CALL "SubRoutine1" USING W23-SR1-PARAM
                                    W23-SR1-ERROR.
           IF W23-SR1-ERROR = ZERO
               DISPLAY "Succesful call to SubRoutine1"
           ELSE
               DISPLAY "Call to SubRoutine1 failed for "
                   W23-SR1-FILENAME UPON SYSERR
           END-IF.
 
       END PROGRAM PROGRAM1.
 
SubRoutine1.cbl
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBROUTINE1.
 
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 W23-SR2-PARAM.
         05 W23-SR2-FILENAME PIC X(255).
       01 W23-SR2-ERROR  PIC 9(4) COMP-X.
 
       LINKAGE SECTION.
       01 W23-SR1-PARAM.
         05 W23-SR1-FILENAME PIC X(255).
       01 W23-SR1-ERROR  PIC 9(4) COMP-X.
 
       PROCEDURE DIVISION USING W23-SR1-PARAM W23-SR1-ERROR.
           INITIALIZE W23-SR2-PARAM.
           INITIALIZE W23-SR2-ERROR.
 
           IF W23-SR1-FILENAME = "TEST"
               MOVE W23-SR1-FILENAME TO W23-SR2-FILENAME
               CALL "SubRoutine2" USING W23-SR2-PARAM
                                        W23-SR2-ERROR
               *> 2
               IF W23-SR2-ERROR = 0
                   MOVE 0 TO W23-SR1-ERROR
               ELSE
                   MOVE W23-SR2-ERROR TO W23-SR1-ERROR
               END-IF
           ELSE
               MOVE 9 TO W23-SR1-ERROR
           END-IF.
 
       END PROGRAM SUBROUTINE1.
 
SubRoutine2.cbl
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBROUTINE2.
 
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       LINKAGE SECTION.
       01 W23-SR2-PARAM.
         05 W23-SR2-FILENAME PIC X(255).
       01 W23-SR2-ERROR  PIC 9(4) COMP-X.
 
       PROCEDURE DIVISION USING W23-SR2-PARAM W23-SR2-ERROR.
           IF W23-SR2-FILENAME = "TEST"
               MOVE 0 TO W23-SR2-ERROR
           ELSE
               MOVE 9 TO W23-SR2-ERROR
           END-IF.
 
       END PROGRAM SUBROUTINE2.
 
                
     
                                    
            The example given above was wrong; that example works. But this one won't. If you press F10 on the line below *> 1 then the debugger will stop on the line below *> 2. The problem seems to occur when a subroutine calls Another subroutine. But maybe this is by design?
 
Program1.cb
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROGRAM1.
 
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 W23-SR1-PARAM.
         05 W23-SR1-FILENAME PIC X(255).
       01 W23-SR1-ERROR  PIC 9(4) COMP-X.
 
       PROCEDURE DIVISION.
           INITIALIZE W23-SR1-PARAM.
           INITIALIZE W23-SR1-ERROR.
 
           MOVE "TEST" TO W23-SR1-FILENAME.
 
           *> 1
           CALL "SubRoutine1" USING W23-SR1-PARAM
                                    W23-SR1-ERROR.
           IF W23-SR1-ERROR = ZERO
               DISPLAY "Succesful call to SubRoutine1"
           ELSE
               DISPLAY "Call to SubRoutine1 failed for "
                   W23-SR1-FILENAME UPON SYSERR
           END-IF.
 
       END PROGRAM PROGRAM1.
 
SubRoutine1.cbl
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBROUTINE1.
 
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 W23-SR2-PARAM.
         05 W23-SR2-FILENAME PIC X(255).
       01 W23-SR2-ERROR  PIC 9(4) COMP-X.
 
       LINKAGE SECTION.
       01 W23-SR1-PARAM.
         05 W23-SR1-FILENAME PIC X(255).
       01 W23-SR1-ERROR  PIC 9(4) COMP-X.
 
       PROCEDURE DIVISION USING W23-SR1-PARAM W23-SR1-ERROR.
           INITIALIZE W23-SR2-PARAM.
           INITIALIZE W23-SR2-ERROR.
 
           IF W23-SR1-FILENAME = "TEST"
               MOVE W23-SR1-FILENAME TO W23-SR2-FILENAME
               CALL "SubRoutine2" USING W23-SR2-PARAM
                                        W23-SR2-ERROR
               *> 2
               IF W23-SR2-ERROR = 0
                   MOVE 0 TO W23-SR1-ERROR
               ELSE
                   MOVE W23-SR2-ERROR TO W23-SR1-ERROR
               END-IF
           ELSE
               MOVE 9 TO W23-SR1-ERROR
           END-IF.
 
       END PROGRAM SUBROUTINE1.
 
SubRoutine2.cbl
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBROUTINE2.
 
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       LINKAGE SECTION.
       01 W23-SR2-PARAM.
         05 W23-SR2-FILENAME PIC X(255).
       01 W23-SR2-ERROR  PIC 9(4) COMP-X.
 
       PROCEDURE DIVISION USING W23-SR2-PARAM W23-SR2-ERROR.
           IF W23-SR2-FILENAME = "TEST"
               MOVE 0 TO W23-SR2-ERROR
           ELSE
               MOVE 9 TO W23-SR2-ERROR
           END-IF.
 
       END PROGRAM SUBROUTINE2.
 
And, which I forgot to mention, Start Project Output is set to Program1.int.
                
     
                                    
            The example given above was wrong; that example works. But this one won't. If you press F10 on the line below *> 1 then the debugger will stop on the line below *> 2. The problem seems to occur when a subroutine calls Another subroutine. But maybe this is by design?
 
Program1.cb
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROGRAM1.
 
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 W23-SR1-PARAM.
         05 W23-SR1-FILENAME PIC X(255).
       01 W23-SR1-ERROR  PIC 9(4) COMP-X.
 
       PROCEDURE DIVISION.
           INITIALIZE W23-SR1-PARAM.
           INITIALIZE W23-SR1-ERROR.
 
           MOVE "TEST" TO W23-SR1-FILENAME.
 
           *> 1
           CALL "SubRoutine1" USING W23-SR1-PARAM
                                    W23-SR1-ERROR.
           IF W23-SR1-ERROR = ZERO
               DISPLAY "Succesful call to SubRoutine1"
           ELSE
               DISPLAY "Call to SubRoutine1 failed for "
                   W23-SR1-FILENAME UPON SYSERR
           END-IF.
 
       END PROGRAM PROGRAM1.
 
SubRoutine1.cbl
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBROUTINE1.
 
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 W23-SR2-PARAM.
         05 W23-SR2-FILENAME PIC X(255).
       01 W23-SR2-ERROR  PIC 9(4) COMP-X.
 
       LINKAGE SECTION.
       01 W23-SR1-PARAM.
         05 W23-SR1-FILENAME PIC X(255).
       01 W23-SR1-ERROR  PIC 9(4) COMP-X.
 
       PROCEDURE DIVISION USING W23-SR1-PARAM W23-SR1-ERROR.
           INITIALIZE W23-SR2-PARAM.
           INITIALIZE W23-SR2-ERROR.
 
           IF W23-SR1-FILENAME = "TEST"
               MOVE W23-SR1-FILENAME TO W23-SR2-FILENAME
               CALL "SubRoutine2" USING W23-SR2-PARAM
                                        W23-SR2-ERROR
               *> 2
               IF W23-SR2-ERROR = 0
                   MOVE 0 TO W23-SR1-ERROR
               ELSE
                   MOVE W23-SR2-ERROR TO W23-SR1-ERROR
               END-IF
           ELSE
               MOVE 9 TO W23-SR1-ERROR
           END-IF.
 
       END PROGRAM SUBROUTINE1.
 
SubRoutine2.cbl
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBROUTINE2.
 
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       LINKAGE SECTION.
       01 W23-SR2-PARAM.
         05 W23-SR2-FILENAME PIC X(255).
       01 W23-SR2-ERROR  PIC 9(4) COMP-X.
 
       PROCEDURE DIVISION USING W23-SR2-PARAM W23-SR2-ERROR.
           IF W23-SR2-FILENAME = "TEST"
               MOVE 0 TO W23-SR2-ERROR
           ELSE
               MOVE 9 TO W23-SR2-ERROR
           END-IF.
 
       END PROGRAM SUBROUTINE2.
 
 wrote:
The example given above was wrong; that example works. But this one won't. If you press F10 on the line below *> 1 then the debugger will stop on the line below *> 2. The problem seems to occur when a subroutine calls Another subroutine. But maybe this is by design?
If I press F10 on the line below *> 1, which is the following:
           CALL "SubRoutine1" USING W23-SR1-PARAM
                                    W23-SR1-ERROR.
It runs through the call and stops at the following line as expected:
           IF W23-SR1-ERROR = ZERO
If I press F11 from the beginning to step line by line, it follows the logic as expected (Program1 calls SubRoutine1 > SubRoutine1 calls Subroutine2 > SubRoutine2 returns to SubRoutine1 > SubRoutine1 returns to Program1 > Program1 stops run).
My project is attached if you wish to test it.
                
     
                                    
            
 wrote:
The example given above was wrong; that example works. But this one won't. If you press F10 on the line below *> 1 then the debugger will stop on the line below *> 2. The problem seems to occur when a subroutine calls Another subroutine. But maybe this is by design?
If I press F10 on the line below *> 1, which is the following:
           CALL "SubRoutine1" USING W23-SR1-PARAM
                                    W23-SR1-ERROR.
It runs through the call and stops at the following line as expected:
           IF W23-SR1-ERROR = ZERO
If I press F11 from the beginning to step line by line, it follows the logic as expected (Program1 calls SubRoutine1 > SubRoutine1 calls Subroutine2 > SubRoutine2 returns to SubRoutine1 > SubRoutine1 returns to Program1 > Program1 stops run).
My project is attached if you wish to test it.
Then I suppose our Visual COBOLs are set up in different ways because when I debug your solution I get exactly the same behaviour: I press F10 on the line below *> 1 and the debugger stops on the line below *> 2.
                
     
                                    
            Then I suppose our Visual COBOLs are set up in different ways because when I debug your solution I get exactly the same behaviour: I press F10 on the line below *> 1 and the debugger stops on the line below *> 2.
What is the version of Visual COBOL and its Patch Update level?
Is it Visual COBOL for Visual Studio Personal Edition?
What is the version of Visual Studio and its update level?
                
     
                                    
            This is interesting:
- Open Program1.cbl in the text editor.
 - Press F11 to start the program.
 - After the program has started, press F10 for each line until the program stops. The program will NOT step into SubRoutine1. In other words, the debugger will act just as expected.
 
Now do this:
- Open Program1.cbl in the text editor.
 - Put the cursor on the line below *> 1 and press Ctrl   F10 (run to cursor).
 - After the program has started and stopped on the line below *> 1, press F10. The program will now enter SubRoutine1 and stop on the line below *> 2.
 
 
 
I see what you mean now. I can now reproduce the problem by:
- Hitting F11 or F10 to start debugging
 
- Running to cursor on the CALL statement
 
- Hitting F10 on the CALL statement
 
or:
- Setting a breakpoint on the CALL statement
 
- Hitting F5 to start debugging
 
- Hitting F10 on the CALL statement
 
If you are using a paid license, can you please report this issue with your local Micro Focus Support? 
                
     
                                    
            I see what you mean now. I can now reproduce the problem by:
- Hitting F11 or F10 to start debugging
 
- Running to cursor on the CALL statement
 
- Hitting F10 on the CALL statement
 
or:
- Setting a breakpoint on the CALL statement
 
- Hitting F5 to start debugging
 
- Hitting F10 on the CALL statement
 
If you are using a paid license, can you please report this issue with your local Micro Focus Support? 
I'll do that. Thanks for your help.
                
     
                                    
            I'll do that. Thanks for your help.
This was later confirmed as a bug. It will be fixed in Patch Update 8 for Visual Cobol 5.0, which is planned to be released on the 1st of May 2020.