Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29273 Discussions

idb - getting command failed because there are suspended threads

tlim022
Beginner
767 Views
Trying to use Intel GUI idb(version 11.0) to debug a g77 program. I am able to step into a subroutine fine . This subroutine calls another subroutine . I am able to step into that as well. I am able to step inside this second subroutine fine , I did a "Run until Caller" - that works fine . But after that I cannot step to the next line . I get "The command failed because there are suspended threads" on the idb console. This is a single thread program . I can step over the subroutines fine until end of program but not if I go into the subroutine. Any pointers appreciated.

Thanks
Tiong
0 Kudos
3 Replies
Rob_Mueller-Albrecht
767 Views

Hi Tiong,

the IDB debugger creates dummy processes for handling pending breakpoints. Thus this could create a second thread. Now this should not lead to anything fitting your description, unless you are stepping into a shared library and you set a breakpoint in this shared library (by issuing the step command) before the shared library itself is loaded. Then there could in theory be a potential (though unlikely) mismatch between the address where the temporary breakpoint for the step command is being set and theactual place where the shared library is being loaded. As a result the "step-breakpoint" may not be released and the helper process may end up being suspended.

I am making a lot of assumptions about your debug scenario with this possible interpretation of how a known defect could somehow cause what you describe. I am not certain that this is what you see.

Can you provide more detail on the application itself and especially on the type of subroutine and the type of objects you are stepping through?

Thanks, Rob
0 Kudos
tlim022
Beginner
767 Views
Quoting - tlim022
Trying to use Intel GUI idb(version 11.0) to debug a g77 program. I am able to step into a subroutine fine . This subroutine calls another subroutine . I am able to step into that as well. I am able to step inside this second subroutine fine , I did a "Run until Caller" - that works fine . But after that I cannot step to the next line . I get "The command failed because there are suspended threads" on the idb console. This is a single thread program . I can step over the subroutines fine until end of program but not if I go into the subroutine. Any pointers appreciated.

Thanks
Tiong
Hi Rob,

The programs weere written by some students who had since left . They are just some Linear equations solver that uses the lapack and blas libraries . I am trying to see if I can strip off all the unnecessary programs/library to see if I can easily reproduce the problem. It is just strange that somehow when you step through multiple subroutines/functions it sort of lost its whereabout and unable to continue. Are there any flag or environment setting that I can set to help pinpointing the exact problem here ?
Tried using a demo copy of totalview , I have no problem stepping through those subroutines so it look like it is an idb problem ?

Tiong
0 Kudos
tlim022
Beginner
767 Views
Hi Rob,

To reproduce the problem :-

# g77 -fpic -O0 -g -c test_sqp.f minsqpoption.f minfindchar.f
# g77 -o test test_sqp.o minsqpoption.o minfindchar.o
# idb ./test

single step through -> Call MINSQPTION -> MINFINDCHAR
In the middle of the do loop in minfindcahr.f if i did a "Run until Caller"
then i get error "command failed because there are suspended treads"

If I were to single step through teh do loop etc until end of program it works fine.
May be there is something wrong with the "Run until Caller" option in the idb debugger ??

Tiong


[tlim022@hpc2]> cat test_sqp.f

c-------------------------------------------------------------------------------

PROGRAM TEST_SQP

IMPLICIT NONE

REAL*8 OPTION(52)


call MINSQPOPTION('Default',OPTION)
write(*,*) 'Program Completed'

END

[tlim022@hpc2]> cat minsqpoption.f

c-------------------------------------------------------------------------------
c
c minsqpoption.f
c
c-------------------------------------------------------------------------------

SUBROUTINE MinSQPOption( option,optset )

IMPLICIT none
CHARACTER*(*) option
INTEGER optset(*)
INTEGER l
INTEGER MinFindChar
EXTERNAL MinFindChar

l = MinFindChar( option,'=' )

return
END


[tlim022@hpc2]> cat minfindchar.f

c-------------------------------------------------------------------------------
c
c minfindchar.f -- misscelanious functions
c
c-------------------------------------------------------------------------------

INTEGER FUNCTION MinFindChar( buff,char )

IMPLICIT none
CHARACTER*(*) buff,char

c Find the first matching character in the string buff

INTEGER i,n

n = len(buff)
do i = 1,n
if (buff(i:i).eq.char(1:1)) then
MinFindChar = i
return
endif
enddo
MinFindChar = n+1

return
END

0 Kudos
Reply