我想在我的代码的根目录中使用某种catch-all异常机制,因此当应用程序意外终止时,我仍然可以提供一些有用的日志记录.
有点像
static void Main () {
if (Debugger.IsAttached)
RunApp();
else {
try {
RunApp();
}
catch (Exception e) {
LogException(e);
throw;
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这一切都运行正常,但我的问题是当我想在引发异常后附加调试器时.
由于异常会转移到运行时,因此窗口会提示附加visual studio,但由于已经重新抛出,因此堆栈中的所有本地和参数都已丢失.
有没有记录这些异常,同时仍提供附加调试器并保留所有有用信息的方法?
假设我有一个带有复制构造函数和移动构造函数的对象'foo',以及一个函数
foo f() {
foo bar;
/* do some work */
return bar;
}
Run Code Online (Sandbox Code Playgroud)
该标准似乎表明编译器将尝试执行:NRVO,通过r值ref返回,按值返回,失败; 以该顺序.
有没有办法强制编译器永远不会按值返回,因为我的复制构造函数非常昂贵?
c++ rvalue-reference move-constructor return-value-optimization c++11