我知道即使问这个问题,我也开始自己开火了,但我想我会看看StackOverflow是否有解决我遇到的问题的方法......
我有一个C#应用程序在客户端站点失败,我无法在本地重现.不幸的是,我很难(不可能)获得任何有助于隔离问题根源的信息.
我有一个相当广泛的错误监控框架,它在所有常见的地方监视未处理的异常:
在我可以访问它们的地方记录详细信息.
这在过去非常有用,可以识别生产代码中的问题,但是没有向我提供有关当前一系列问题的任何信息.
我最好的猜测是,核心问题是"粗鲁"异常类型之一(线程中止,内存不足,堆栈溢出,访问冲突等),这些异常类型正在逐步升级为严重关闭有机会看到发生了什么.
我可以对快照信息做些什么,因为我的进程崩溃会有用吗?理想情况下,我可以写出我的自定义日志格式,但如果我能有一种可靠的方法来确保在某处写入崩溃转储,我会很高兴.
我希望我可以实现从CriticalFinalizerObject派生的类,并在它处理时吐出最后机会错误注销,但这似乎并没有在我测试的StackOverflow场景中触发.
由于缺少代码签名证书,我无法使用Windows错误报告和朋友.
我不是试图从任意异常中"恢复",我只是想记下下去的路上出了什么问题.
有任何想法吗?
当我试图在目标机器上解复我的应用程序时,我收到此错误.
我用Google搜索并发现某些dll需要注册(在我的应用程序中使用)
所以,我将dll复制到System32并执行了regsvr32
然后我得到了这个错误
Interop.ShockwaveFlashObject.dll已加载但未找到DllRegisterServer入口点.该文件无法注册
一个奇怪的是,应用程序不能只在一台机器上运行.我在10台不同的机器上测试过,一切运行良好.它不仅适用于一台机器.
有人可以帮我这个吗?
我使用AppDomain.UnhandledExceptionEvent来捕获 WPF、控制台和 WinForms 应用程序上未处理的异常。
但相同的代码不适用于 Windows 服务。我应该怎么办?
我是软件开发的新手,也是stackoverflow的新手,所以对我来说很容易.
背景:我正在开发一个C#类库,它通过tcp/ip处理第三方应用程序发送的xml消息(使用异步套接字).我正在使用com-interop将类库公开给Vb6应用程序.当C#库处理它通过套接字接收的xml时,它会引发消费vb6应用程序订阅的各种事件(这样,当我们最终在.Net中重写整个应用程序时,我们已经完成了这个组件).
问题:我想捕获所有仅用于登录的未处理异常.在winforms应用程序中,您可以将事件连接到AppDomain.CurrentDomain.UnhandledException和Application.ThreadException.有没有办法同样抓取异常数据来记录类库中的信息?
重点:
我不是试图从这些异常中恢复,而只是记录它们并让异常传播并在需要时崩溃应用程序.
我正在尽力在本地捕获所有特定异常,无论我知道它们可能发生在哪里.因此,我的目的是记录真正意外的异常.
任何人都可以为我提供一些方向吗?到目前为止,我发现的最佳选项似乎是在每个公共方法中放置一个通用的try catch块,记录异常,然后抛出它.这似乎不太理想:
public void SomeMethod()
{
try
{
// try something here...
}
catch (Exception ex)
{
Log(ex);
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
这不仅看起来像一个糟糕的设计,而且我不知道如果其中一个异步回调在不同的线程上导致异常而不是调用该方法会发生什么.这个通用的try/catch块是否仍会捕获这样的异常?
谢谢你的帮助.
编辑:我最初标记@Eric J.的答案是正确的,但在尝试实现解决方案后,我发现它不能很好地处理我正在使用的套接字类的异步回调.一旦使用线程池线程来触发异步回调,我似乎无法捕获堆栈中稍后发生的任何异常.我是否需要使用AOP框架,还是有其他方法来捕获这些异常?
c# multithreading class-library com-interop unhandled-exception
我想在OpenCV中从我的颜色(3通道)图像中获取直方图,但每次我都像这样做calcHist直方图:
//int histSize[3];
//float hranges[2];
//const float* ranges[3];
//int channels[3];
ColorHistogram::ColorHistogram()
{
// Prepare arguments for a color histogram
histSize[0]= histSize[1]= histSize[2]= 256;
hranges[0]= 0.0; // BRG range
hranges[1]= 255.0;
ranges[0]= hranges; // all channels have the same range
ranges[1]= hranges;
ranges[2]= hranges;
channels[0]= 0; // the three channels
channels[1]= 1;
channels[2]= 2;
}
cv::MatND ColorHistogram::getHistogram(const cv::Mat &image)
{
cv::MatND hist;
// Compute histogram
cv::calcHist(&image,
1, // histogram of 1 image only
channels, // the channel used
cv::Mat(), // no …Run Code Online (Sandbox Code Playgroud) 我有一个std :: weak_ptr.在尝试使用底层对象之前,我将其锁定以获取shared_ptr:
auto foo_sharedptr = foo_weakptr.lock();
if (foo_sharedptr != nullptr)
{
// do stuff with foo
}
Run Code Online (Sandbox Code Playgroud)
通常这很好.但是,有时我在锁定调用期间遇到访问冲突:
Unhandled exception at 0x00007FF91F411BC3 (My.dll) in My.exe:
0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
Run Code Online (Sandbox Code Playgroud)
我的猜测是底层指针已被删除,但我对weak_ptr的理解是,在这种情况下,lock应该返回一个nullptr.我在滥用这种类型吗?如果没有,我应该如何调试呢?
我得到了一个未处理的错误,但不知道它来自哪里.我的应用程序在不同的方法中有几个http.request(选项,回调).end(),回调的陷阱是"uncaughtException"和"error".我想知道我的哪些方法引发了这个问题.以下是我得到的错误.这是随机的.任何想法如何追踪这个?我希望有一些全局方法来捕获未处理的错误.
events.js:85
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at exports._errnoException (util.js:746:11)
at TCP.onread (net.js:559:26)
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,它将一些数据存储在firebird数据库中.我正在使用嵌入式火鸟服务器和EntityFramework,并且所有工作都非常好但是当我通过表单上的x按钮关闭我的应用程序时,我得到一个Windows系统消息"应用程序已停止工作",我无法捕获此异常.我的应用程序中有一个UnhandledExceptionHandler:
// Add handler for UI thread exceptions
Application.ThreadException += new ThreadExceptionEventHandler(UIThreadException);
// Force all WinForms errors to go through handler
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//This handler is for catching non-UI thread exceptions
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
.....some other code..........
Application.Run(new MainForm());
Run Code Online (Sandbox Code Playgroud)
但这种例外从来没有被它抓住过.所以我去了windows事件日志,发现有错误事件的xml-view:
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
<Provider Name="Application Error" />
<EventID Qualifiers="0">1000</EventID>
<Level>2</Level>
<Task>100</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2017-03-14T23:06:25.000000000Z" />
<EventRecordID>36077</EventRecordID>
<Channel>Application</Channel>
<Computer>MYPC</Computer>
<Security />
</System>
- <EventData>
<Data>MyApp.exe</Data>
<Data>1.0.0.0</Data>
<Data>58c7a3f0</Data>
<Data>fbintl.DLL</Data>
<Data>2.5.5.26952</Data>
<Data>5644432f</Data>
<Data>c0000005</Data>
<Data>00004e9c</Data>
<Data>1d64</Data>
<Data>01d29d1797fb7f0d</Data>
<Data>G:\Programming\WorkSpace\C#\MyApp\bin\x86\Debug\MyApp.exe</Data>
<Data>G:\Programming\WorkSpace\C#\MyApp\bin\x86\Debug\FireBirdEmbeddedServer\intl\fbintl.DLL</Data>
<Data>d84a6ca6-090a-11e7-8151-005056c00008</Data>
</EventData>
</Event> …Run Code Online (Sandbox Code Playgroud) 看看下面的MWE。
import sys
from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.button = QPushButton('Bham!')
self.setCentralWidget(self.button)
self.button.clicked.connect(self.btnClicked)
def btnClicked(self):
print(sys.excepthook)
raise Exception
#import traceback
#sys.excepthook = traceback.print_exception
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
我有很多问题。我不知道它们是否都相关(我想是的),如果它们不相关,请原谅我。
当我从终端运行以上代码时,一切都很好。该程序运行,如果我单击按钮,它将打印回溯并消失。如果我在IDE(我测试过Spyder和PyCharm)中运行它,则不会显示回溯。知道为什么吗?从本质上讲,在此处和此处的其他帖子中也提出了相同的问题。请不要将此标记为其中任何一个的重复;请继续阅读。
通过添加注释行,可以再次正确显示回溯。但是,它们还具有讨厌的副作用,即该应用程序不会再因未处理的异常而终止!我不知道为什么会这样,因为AFAIK excepthook仅打印回溯,它不能阻止程序退出。目前,救援已经为时已晚。
另外,我不了解Qt在这里如何发挥作用,因为未在插槽内引发的异常仍会像我期望的那样使应用程序崩溃。无论我是否进行更改excepthook,PyQt似乎都不会覆盖它(至少print似乎暗示了这一点)。
仅供参考,我正在将Python 3.5与PyQt 5.6配合使用,并且我知道PyQt 5.5中引入的异常处理方面的变化。如果确实是上述行为的原因,我很高兴听到一些更详细的解释。
我的代码调用了当前未运行的WCF服务。所以我们应该期待EndPointNotFoundException。using语句尝试对Close()导致a的异常连接进行故障处理CommunicationObjectFaultedException。在use块周围的try catch块中捕获了此异常:
class Program
{
static void Main()
{
try
{
using (ChannelFactory<IDummyService> unexistingSvc = new ChannelFactory<IDummyService>(new NetNamedPipeBinding(), "net.pipe://localhost/UnexistingService-" + Guid.NewGuid().ToString()))
{
using (IClientChannel chan = (unexistingSvc.CreateChannel() as IClientChannel))
{
(chan as IDummyService)?.Echo("Hello");
}
}
}
catch (EndpointNotFoundException ex)
{
Console.WriteLine("Expected");
}
catch (CommunicationObjectFaultedException ex)
{
Console.WriteLine("Expected: caused by closing channel that has thrown EndPointNotFoundException");
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意,服务EndPoint使用新的Guid,因此它将永远不会监听服务。
IDummyService 是:
[ServiceContract]
interface IDummyService
{
[OperationContract]
string Echo(string e);
}
Run Code Online (Sandbox Code Playgroud)
这会导致Visual Studio调试器(Visual Studio Professional …