我在我的 Android 项目中使用崩溃报告库。一旦激活,它会对每个未捕获的异常做出反应,并在应用程序关闭之前创建报告。
到目前为止一切顺利,但我想为此添加更多“控制”并为非异常创建报告。我的想法是这样定义“假”异常:
public final class NonFatalError extends RuntimeException {
private static final long serialVersionUID = -6259026017799110412L;
public NonFatalError(String msg) {
super(msg);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我想发送非致命错误消息并创建报告时,我将这样做:
throw new NonFatalError("Warning! A strange thing happened. I report this to the server but I let you continue the job...");
Run Code Online (Sandbox Code Playgroud)
如果从主线程调用,这显然会使应用程序崩溃。所以,我尝试将它放在后台线程上!
new Thread(new Runnable() {
@Override
public void run() {
throw new NotFatalError("Warning! A strange thing happened. I report this to the server but I let you continue the job...");
}
}).start(); …Run Code Online (Sandbox Code Playgroud) 最近我开始收到这样的崩溃。没有更新任何东西来添加吊带。有谁知道什么会导致这个问题?谢谢。
com.squareup.retrofit2:改造:
改造版本 = "2.6.1"; 改造转换器GsonVersion = "2.6.1"; 改造适配器RxJava2版本=“2.6.1”
Dns.java line 39
okhttp3.Dns$1.lookup
Fatal Exception: io.reactivex.exceptions.UndeliverableException
com.companyname.data.service.retrofit.exception.RetrofitException: Unable to resolve host "api.companyserver.com": No address associated with hostname
io.reactivex.plugins.RxJavaPlugins.onError (RxJavaPlugins.java:349)
io.reactivex.internal.operators.observable.ObservablePublish$PublishObserver.onError (ObservablePublish.java:187)
io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated (ObservableObserveOn.java:276)
io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal (ObservableObserveOn.java:172)
io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run (ObservableObserveOn.java:252)
io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run (HandlerScheduler.java:109)
Caused by com.companyname.data.service.retrofit.exception.RetrofitException
Unable to resolve host "api.companyserver.com": No address associated with hostname
com.lampa.letyshops.data.service.retrofit.adapter.RxErrorHandlingCallAdapterFactory$Rx2CallAdapterWrapper.asRetrofitException (RxErrorHandlingCallAdapterFactory.java:75)
com.lampa.letyshops.data.service.retrofit.adapter.RxErrorHandlingCallAdapterFactory$Rx2CallAdapterWrapper.access$000 (RxErrorHandlingCallAdapterFactory.java:41)
com.lampa.letyshops.data.service.retrofit.adapter.RxErrorHandlingCallAdapterFactory$Rx2CallAdapterWrapper$1.apply (RxErrorHandlingCallAdapterFactory.java:62)
com.lampa.letyshops.data.service.retrofit.adapter.RxErrorHandlingCallAdapterFactory$Rx2CallAdapterWrapper$1.apply (RxErrorHandlingCallAdapterFactory.java:59)
io.reactivex.internal.operators.observable.ObservableOnErrorNext$OnErrorNextObserver.onError (ObservableOnErrorNext.java:91)
retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onError (BodyObservable.java:72)
retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual (CallExecuteObservable.java:55)
io.reactivex.Observable.subscribe (Observable.java:10955)
retrofit2.adapter.rxjava2.BodyObservable.subscribeActual (BodyObservable.java:34)
io.reactivex.Observable.subscribe (Observable.java:10955)
io.reactivex.internal.operators.observable.ObservableOnErrorNext.subscribeActual (ObservableOnErrorNext.java:38)
io.reactivex.Observable.subscribe (Observable.java:10955)
io.reactivex.internal.operators.observable.ObservableMap.subscribeActual (ObservableMap.java:33)
io.reactivex.Observable.subscribe (Observable.java:10955) …Run Code Online (Sandbox Code Playgroud) 以下是我从 Google Play 控制台捕获的日志,该日志似乎主要发生在主要数字中。 https://source.android.com/devices/tech/debug/native-crash没有多大帮助。
什么可能导致此错误?我无法重现这个问题。但在生产中大量出现。(不过我还没有在所有设备上尝试过)
观察到的设备:
华为 P30 Pro (HWVOG)、Android 9
华为 HUAWEI Y9 Prime 2019 (HWSTK-HF)、Android 9
三星 Galaxy S9 (starlte)、Android 9
华为 P30 Pro (HWVOG)、Android 9
三星 Galaxy Note9 ( Crownlte)、Android 9
华为 P30 Pro (HWVOG)、Android 9
三星 Galaxy Note10+ (d2s)、Android 9
华为 Mate 20 Pro (HWLYA)、Android 9
华为华为 Y9 Prime 2019 (HWSTK-HF)、Android 9
华为 Mate 20 Pro (HWLYA)、Android 9
华为 HUAWEI P30 lite (HWMAR)、Android 9
来自 Google Play 管理中心的错误
*** *** *** *** *** *** …Run Code Online (Sandbox Code Playgroud) 这是 Visual Studio Pro 2019 的最新版本,我的桌面上有一个名为 .vs 的新文件夹

桌面文件夹包含一个名为 v16 的文件夹,其中包含一个名为 .suo 的文件

难道是因为我今天之前在使用Visual Studio之前安装了“CloneSpy”?我该怎么办?
像Google breakpad这样的崩溃报告工具的主要目的是从剥离的二进制文件中生成核心转储或小型转储文件,以便稍后使用调试符号进行处理。通常这些二进制文件是应用了编译器优化的发布版本,也被剥离了。
1.构建+安装google breakpad:
git clone https://chromium.googlesource.com/breakpad/breakpad && cd breakpad
git clone https://chromium.googlesource.com/linux-syscall-support src/third_party/lss
./configure --prefix=/usr/local
make -j$(nproc) && sudo make install
Run Code Online (Sandbox Code Playgroud)
2.代码:
CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)
project(BreakPadTest)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
set(BREAKPAD_DIR "/usr/local/include/breakpad")
option(OPTION_WITH_O1 "With -O1" OFF)
if(OPTION_WITH_O1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1 -fno-omit-frame-pointer")
endif()
include_directories(
${BREAKPAD_DIR}
)
add_executable(${PROJECT_NAME} "main.cc")
target_link_libraries(${PROJECT_NAME}
-lstdc++fs
-pthread
libbreakpad_client.a
)
Run Code Online (Sandbox Code Playgroud)
main.cc:
#include <thread>
#include <experimental/filesystem>
#include <client/linux/handler/exception_handler.h>
namespace breakpad = google_breakpad;
namespace filesystem = std::experimental::filesystem;
static …Run Code Online (Sandbox Code Playgroud) Starting in macOS 12 (Monterey), the system apparently writes crash file as .ips files, instead of the traditional .crash file format.
The file appears to contain JSON data:
{"app_name":"Helper","timestamp":"2021-10-30 18:49:32.00 +0100","app_version":"3.0.0(66) beta","slice_uuid":"673198dd-94ac-31a7-9e81-09fe6c781255","build_version":"3.0.0.66","platform":1,"bundleID":"com.dislt.helper","share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"macOS 12.0.1 (21A559)","incident_id":"CC03C2EC-C1D4-4F6E-AA1F-6C4EC555D6B8","name":"Helper"}
{
"uptime" : 91000,
"procLaunch" : "2021-10-30 18:49:29.7791 +0100",
"procRole" : "Unspecified",
"version" : 2,
"userID" : 501,
"deployVersion" : 210,
"modelCode" : "MacBookPro14,3",
"procStartAbsTime" : 91844701503187,
"coalitionID" : 1244,
"osVersion" : {
"train" : "macOS 12.0.1",
"build" : "21A559",
"releaseType" : "User"
},
"captureTime" : …Run Code Online (Sandbox Code Playgroud) 简而言之,[NSURL URLWithString:]似乎提出了一个例外。根据文档“如果字符串格式错误,则返回nil。” 没有提到在任何情况下都引发例外情况。除此之外,nil在将字符串转换为URL之前,我都对URL进行了编码和检查。
在转换URL之前,任何人都可以提供有关它可能是哪个异常或我应该做的其他错误检查的任何建议吗?
如果您对详细信息感兴趣,则调用代码如下所示:
NSString* tmpText = [newUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
if (tmpText == nil) {
// error handling
}
else {
NSURL* tmpURL = [NSURL URLWithString:tmpText];
Run Code Online (Sandbox Code Playgroud)
这是从iTunes Connect下载的崩溃报告中的一部分:
8 libobjc.A.dylib 0x300c1f84 objc_exception_throw
9 CoreFoundation 0x3029a598 +[NSException raise:format:arguments:]
10 CoreFoundation 0x3029a538 +[NSException raise:format:]
11 Foundation 0x30696dde -[NSURL initWithString:relativeToURL:]
12 Foundation 0x30696cd8 +[NSURL URLWithString:relativeToURL:]
13 Foundation 0x30696cae +[NSURL URLWithString:]
14 Yummy 0x000146ca -[DeliciousPostCell setUrl:] + 46
Run Code Online (Sandbox Code Playgroud)
该URL似乎是某种“错误”格式,但实际上应该返回一个nil异常。
我从未见过自己引发异常,因此无法使用XCode捕获代码并查看正在发生的情况。并且遇到问题的用户从未直接与我联系,因此我无法要求更多详细信息。任何建议,不胜感激。
更新(14/7/2009):看起来像这样的hack,但是我在可疑行周围添加了一个异常块。我还提出了Radar错误报告(#7031551),建议代码应与文档匹配。
到底是什么
Hardware Model: iPhone1,2
Run Code Online (Sandbox Code Playgroud)
手段?我从iPhone 3G设备上得到了这份报告.
现在我有一些报道
Hardware Model: iPhone 3,1
Run Code Online (Sandbox Code Playgroud)
它究竟是什么类型的设备?我有一些
Hardware Model: iPod4,1
Run Code Online (Sandbox Code Playgroud)
另外,也没有猜测.
我们得到了一个.NET WCF服务,理想情况下应该100%正常运行.但有时我们的应用程序中存在由第三方数据库连接组件引起的内存泄漏问题.我们配置nnCron来监视进程存在,当退出该服务的进程时,它应该再次启动它.
但当应用程序崩溃时,窗口会弹出一个嘈杂的窗口,通知应用程序已崩溃.
这里是:

只有当我们点击哑巴"关闭程序"按钮时,该过程才真正从系统中消失.并且只有在nnCron重启服务之后.我们不想监视这个窗口出现,只是想摆脱它为nnCron成功的工作.
那么我们如何禁用这样的窗口呢?
操作系统是Windows server 2008 r2 Standard.
我正在构建一个有时会崩溃的应用程序,我想知道它在下次打开它时崩溃了所以我可以向用户建议一些崩溃后的选项.我怎样才能发现崩溃?此外,我希望能够在崩溃之前保存用户的工作,我的意思是实时检测崩溃,我可以在不知道崩溃的地方进行吗?