- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Thanks
Tiong
Link Copied
3 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Thanks
Tiong
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
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

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page