468,512 Members | 1,423 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,512 developers. It's quick & easy.

gdb error: Previous frame inner to this frame (corrupt stack?)

Hello,

I have a crashing application and tried to find out what is going
wrong. So I run this application with the gdb debugger. I found the
position of the crash in a function which searches the id of a
database element by its name. If the database element is not found it
shall throw an exception. This is the related code:

SRC_ID_TYP Source::getId( const std::string& name_ )
throw( XmlDatabaseException ) {
SRC_ID_TYP srcId;
if ( GetSourceId( name_.c_str(), &( srcId ) ) != OLD_PAG ) {
string errMsg( "Source '" );
errMsg += name_ + "' does not exist in the database";
throw XmlDatabaseException( errMsg );
}
return srcId;
} // *** Source::getId() ***

If the id can be resolved correctly the application works fine. But if
not, it crashes when it tries to throw the exception. The message I
get in the debugger then is:
"Previous frame inner to this frame (corrupt stack?)"

But when I look at the backtrace of the stack it looks very ok:

8 xmldb::Source::getId() Source.cpp:398 0x08062e68
7 xmldb::Source::create() Source.cpp:106 0x0805fb3f
6 xmldb::ADSFile::parseDOMTree() ADSFile.cpp:380 0x0805aec0
5 xmldb::ADSFile::parseXML() ADSFile.cpp:312 0x0805a0cb
4 xmldb::ADSFile::read() ADSFile.cpp:104 0x08056fcf
3 ImportExport::importData() ImportExport.cpp:373 0x08051c1b
2 ImportExport::execute() ImportExport.cpp:305 0x08051764
1 main() iet.cpp:56 0x08055fbb

Know I'm at the end of my knowledge.
Can someone tell me, what is the reason for such an error message? And
what can I investigate further to find the mistake?

Thanks,
Sven
Nov 30 '07 #1
2 5341
I found the mistake!

With the usage of a factory method I had to move the search of the id
into this static method. But now the throw() declarations of one
method above does not fit any more.

But I wonder, why this is not caught by the compiler. I did not think
that a wrong throw() declaration of a method causes a runtime error.
Isn't it just for code clearance or use the compiler this information
for optimizing?

Greetz, Sven
Nov 30 '07 #2
On 30 Nov, 11:19, Sven <s...@ast.dfs.dewrote:
I found the mistake!

With the usage of a factory method I had to move the search of the id
into this static method. But now the throw() declarations of one
method above does not fit any more.

But I wonder, why this is not caught by the compiler. I did not think
that a wrong throw() declaration of a method causes a runtime error.
Isn't it just for code clearance or use the compiler this information
for optimizing?
And the moral of the story is ...
don't use exception specifications.
Nov 30 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Matias Silva | last post: by
2 posts views Thread by Mongoose7 | last post: by
reply views Thread by Marty Cruise | last post: by
8 posts views Thread by Andrew Teece | last post: by
2 posts views Thread by K B | last post: by
2 posts views Thread by Hans van Kruijssen | last post: by
reply views Thread by NPC403 | last post: by
1 post views Thread by fmendoza | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.