【问题标题】:Crash on __pthread_kill [closed]__pthread_kill 崩溃 [关闭]
【发布时间】:2014-07-06 00:35:30
【问题描述】:

得到下面的崩溃报告,但不知道为什么会发生以及如何修复它。

SIGABRT 在 0x000000019aa3258c 处中止

libsystem_kernel.dylib __pthread_kill

Thread : Crashed: com.apple.main-thread
0  libsystem_kernel.dylib         0x000000019aa3258c __pthread_kill + 8
1  libsystem_pthread.dylib        0x000000019aab516c pthread_kill + 104
2  libsystem_c.dylib              0x000000019a9c6808 abort + 112
3  libc++abi.dylib                0x0000000199bec994 __cxa_bad_cast
4  libc++abi.dylib                0x0000000199c07184 std::__terminate(void (*)()) + 44
5  libc++abi.dylib                0x0000000199c06d3c __cxa_rethrow + 144
6  libobjc.A.dylib                0x000000019a3443a8 objc_exception_rethrow + 44
7  CoreFoundation                 0x000000018dd3d74c CFRunLoopRunSpecific + 576
8  GraphicsServices               0x0000000193a21c0c GSEventRunModal + 168
9  UIKit                          0x0000000190e6efdc UIApplicationMain + 1156
10 *************                  0x00000001000a5c80 main (main.m:17)
11 libdyld.dylib                  0x000000019a937aa0 start + 4

【问题讨论】:

  • 您看到的是抛出了一个 Objective C 异常。您的应用程序没有捕捉到它,因此操作系统正在终止您的应用程序。您可以首先打开 Objective-C 异常断点并在调试器中中断抛出的异常。然后运行您的应用程序并让它再次发生。
  • 我认为 pthread_kill 是未处理异常的结果,而不是原因。正如user1118321所说,通过设置异常断点很容易找到导致这种情况的原因。
  • @user1118321 如果我不知道如何重新创建异常,知道如何捕获异常吗?
  • 您可以编写代码来捕获异常并对其进行处理,但如果您不知道是什么原因造成的,那么修复该错误将非常困难。 See here 详细了解如何捕获异常并执行某些操作(记录它,或将其显示给用户,或其他)。这将阻止立即崩溃,但如果您不小心,它可能会使您的应用程序处于奇怪的状态。来自设备的其他日志也可以提供线索。

标签: ios ios7 crash


【解决方案1】:

为了更容易查看崩溃的来源,请按如下方式更改您的 main.m 文件:

int main(int argc, char* argv[])
{
    @autoreleasepool
    {
        int returnValue;
        @try
        {
            returnValue = UIApplicationMain(argc, argv, nil, 
                NSStringFromClass([MyAppDelegate class]));
        }
        @catch (NSException* exception)
        {
            LogError(@"Uncaught exception: %@, %@", [exception description], 
                [exception callStackSymbols]);
            @throw exception;
        }
        return returnValue;
    }
}

。 . .或者像其他人建议的那样,设置一个异常断点。

如果您的崩溃只是“在野外”发生,您将不得不重新符号化您的崩溃日志。诸如曲棍球或试飞之类的服务会为您执行此操作,或者可以在 this process 之后手动完成。

【讨论】:

  • (很抱歉我对 C 或 Xcode 一无所知,但是) 如何导入 LogError?我找到了 main.m。我收到Implicit declaration of function 'LogError' is invalid in C99
  • @Carolus 这只是举例,你可以在这里做任何你喜欢的事情。如果您刚刚开始,我建议您替换为 NSLog
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多