我有一个代码:
void Engine::count(const std::set<boost::filesystem3::path>& files)
{
for (auto e : files)
{
try
{
count_(e);
}
catch (const Bad_formatting& ) // Here I'm trying to catch this exception
{//but debugger never stops on this line even though breakpoint is set
throw; // and re-throw it
}
}
}
然后有count_
函数:
void Engine::count_(const boost::filesystem3::path& file)
{
// and somewhere along this lines I'm throwing Bad_Formatting:
if (something)
{
}
else
{
throw Bad_formatting(file,"No end of multicomment found.");
}
}
但是在抛出这个异常后,我正在通过对话告诉我,我的应用程序要求运行时以不寻常的方式终止...
例外永远不会发生。为什么?这两个fncs都是静态的这个事实与它有什么关系吗?或者我正在使用Qt的事实?
编辑:
这是调用count的代码:
try
{
Engine::count(files);
}
catch (const Bad_formatting& e)
{
QMessageBox::warning(nullptr,"Bad Formatting",msg);
}
////
struct Bad_formatting : public std::runtime_error
{
private:
boost::filesystem3::path file_name_;
public:
Bad_formatting(boost::filesystem3::path file_name,
const char* msg):std::runtime_error(msg),
file_name_(file_name)
{
}
const boost::filesystem3::path& file_name()const
{
return file_name_;
}
~Bad_formatting()throw()
{/*eb*/}
};
答案 0 :(得分:2)
从您展示的代码中
第4项似乎是重要的部分。
答案 1 :(得分:0)
您使用的是什么编译器/工具链/调试器?如果您正在使用GCC,则可以使用catch throw
和catch catch
命令在异常抛出/捕获时添加断点。
由于可能的原因是它没有被捕获,如果catch块中的唯一代码是throw,编译器可能已经优化了整个块。考虑将任何指令添加到块中(注意任何可能需要一些带有实际副作用的指令,否则编译器也可能会对其进行优化)