objective-c - Xcode5 如何调试 快速定位出错行
怪我咯
怪我咯 2017-04-22 09:00:08
0
3
751

、、、objectivec
2014-07-21 18:02:38.259 Sections[2962:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'must pass a class of kind UITableViewCell'
*** First throw call stack:
(
0 CoreFoundation 0x017375e4 exceptionPreprocess + 180
1 libobjc.A.dylib 0x014ba8b6 objc_exception_throw + 44
2 CoreFoundation 0x017373bb +[NSException raise:format:] + 139
3 UIKit 0x00314e08 -[UITableView registerClass:forCellReuseIdentifier:] + 247
4 Sections 0x000030eb -[BIDViewController searchDisplayController:didLoadSearchResultsTableView:] + 171
5 UIKit 0x005cc0b4 -[UISearchDisplayController searchResultsTableView] + 446
6 UIKit 0x005cd5f4 -[UISearchDisplayController _containerView] + 1031
7 UIKit 0x005c7563 -[UISearchDisplayController setActive:animated:] + 9462
8 UIKit 0x005cad4f -[UISearchDisplayController searchBarTextDidBeginEditing:] + 298
9 UIKit 0x004f52c9 -[UISearchBar(UISearchBarStatic) _searchFieldBeginEditing] + 113
10 libobjc.A.dylib 0x014cc81f -[NSObject performSelector:withObject:] + 70
11 UIKit 0x0022ec8c -[UIApplication sendAction:to:from:forEvent:] + 108
12 UIKit 0x0022ec18 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61
13 UIKit 0x003266d9 -[UIControl sendAction:to:forEvent:] + 66
14 UIKit 0x00326a9c -[UIControl _sendActionsForEvents:withEvent:] + 577
15 UIKit 0x0091254e -[UITextField willAttachFieldEditor:] + 685
16 UIKit 0x0032c4d5 -[UIFieldEditor becomeFieldEditorForView:] + 927
17 UIKit 0x00909643 -[UITextField _becomeFirstResponder] + 160
18 UIKit 0x004f841a -[UISearchBarTextField _becomeFirstResponder] + 98
19 UIKit 0x00386585 -[UIResponder becomeFirstResponder] + 400
20 UIKit 0x00289d0b -[UIView(Hierarchy) becomeFirstResponder] + 114
21 UIKit 0x009090e3 -[UITextField becomeFirstResponder] + 51
22 UIKit 0x005ae651 -[UITextInteractionAssistant(UITextInteractionAssistant_Internal) setFirstResponderIfNecessary] + 135
23 UIKit 0x005b0ba2 -[UITextInteractionAssistant(UITextInteractionAssistant_Internal) oneFingerTap:] + 2640
24 UIKit 0x005a4f8c _UIGestureRecognizerSendActions + 230
25 UIKit 0x005a3c00 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 383
26 UIKit 0x005a566d -[UIGestureRecognizer _delayedUpdateGesture] + 60
27 UIKit 0x005a8bcd ___UIGestureRecognizerUpdate_block_invoke + 57
28 UIKit 0x005a8b4e _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 317
29 UIKit 0x0059f248 _UIGestureRecognizerUpdate + 199
30 UIKit 0x0026bd4a -[UIWindow _sendGesturesForEvent:] + 1291
31 UIKit 0x0026cc6a -[UIWindow sendEvent:] + 1030
32 UIKit 0x00240a36 -[UIApplication sendEvent:] + 242
33 UIKit 0x0022ad9f _UIApplicationHandleEventQueue + 11421
34 CoreFoundation 0x016c08af __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION
+ 15
35 CoreFoundation 0x016c023b __CFRunLoopDoSources0 + 235
36 CoreFoundation 0x016dd30e __CFRunLoopRun + 910
37 CoreFoundation 0x016dcb33 CFRunLoopRunSpecific + 467
38 CoreFoundation 0x016dc94b CFRunLoopRunInMode + 123
39 GraphicsServices 0x036d89d7 GSEventRunModal + 192
40 GraphicsServices 0x036d87fe GSEventRun + 104
41 UIKit 0x0022d94b UIApplicationMain + 1225
42 Sections 0x0000399d main + 141
43 libdyld.dylib 0x01d75701 start + 1
44 ??? 0x00000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
、、、
如上所示,错误提示,使用的是XCODE5 无法根据错误提示找到出错行,网上有的方法试过不可以。希望知道的同学告知下。谢谢!

怪我咯
怪我咯

走同样的路,发现不同的人生

membalas semua(3)
Ty80

Tambah titik putus pengecualian (Tambah Titik Putus Pengecualian) dalam Navigator Titik Putus Xcode, dan kemudian tetapkan keadaan titik putus kepada Exception: Object-C, supaya ia boleh pecah sebelum pengecualian dilemparkan, dan anda boleh melihat tindanan panggilan pada masa itu .

Perhatikan bahawa adalah lebih baik untuk membuka titik putus ini apabila kod bermasalah hampir dilaksanakan, jika tidak, ia akan terus diganggu oleh pelbagai pengecualian.

洪涛

Projek anda dipanggil Bahagian, bukan?
Di sinilah pengecualian anda dilemparkan:
4 Bahagian 0x000030eb -[BIDViewController searchDisplayController:didLoadSearchResultsTableView:] + 171
Kod mengimbangi kaedah searchDisplayController kelas BIDViewController ialah 171 (hampir 170 aksara kaedah ini, hampir baris 2 dan 3. Ingat, 171 bukan nombor baris atau sesuatu).

Mengenai analisis pengecualian iOS, ia benar-benar menyakitkan pada mulanya, kerana ia tidak memberitahu pembangun secara langsung di mana pengecualian itu dilemparkan, malah kadangkala tiada timbunan pengecualian, walaupun terdapat timbunan pengecualian tidak mudah untuk memahami maksudnya, terutamanya nombor pengimbangan kod, amat mengelirukan. Biasanya terdapat banyak kaedah penyahpepijatan, dan ia akan mengambil masa sepanjang malam untuk merangkumi kesemuanya. titik putus pengecualian yang dijawab oleh Huan Du adalah satu, dan sudah tentu terdapat kaedah paparan pencetakan penegasan log, tetapan titik putus simbolik, alat penyahpepijatan LLDB . Secara peribadi, saya masih lebih suka kaedah analisis tindanan yang disiarkan dalam soalan anda. Pada asasnya, masalah boleh ditentukan berdasarkan nama kelas, nama kaedah dan kod offset.

Mengenai laporan tindanan, perkenalkan secara ringkas maksud kandungannya:
Contohnya:
4 Bahagian 0x000030eb -[BIDViewController searchDisplayController:didLoadSearchResultsTableView:] + 171
Ia termasuk sejumlah 5 bahagian: 4/Sections/0x000030eb/-[BIDVi...ew:]/171
Bahagian 1: Tindanan mengeluarkan nombor jujukan, lebih awal nombor jujukan kod dipanggil
Bahagian 2: Rangka kerja (perpustakaan/projek) kepunyaan kaedah yang dipanggil Contohnya, Bahagian ialah projek anda; Bahagian 3: Alamat memori kaedah panggilan, iaitu 0x000030eb
Bahagian 4: Memanggil nama kaedah, ini sangat penting, iaitu -[BIDViewController searchDisplayController:didLoadSearchResultsTableView:]
Bahagian 5: Kod mengimbangi selepas memanggil kaedah selepas kompilasi Di sini sekali lagi, ia bukan nombor baris, tetapi kod yang dikompilasi, tetapi ia pada asasnya sama dengan bilangan aksara Anda boleh menggunakan beberapa alat teks untuk mengira anda Kaedah mengimbangi aksara ialah anggaran kasar baris ralat, dan ralat umum adalah dalam 3 hingga 5 baris.

Berikut ialah petua kecil untuk mengelakkan xcode daripada tidak mencetak log tindanan:

Tambahkan @try@catch pada kaedah utama dalam main.m, seperti ini:

#import <UIKit/UIKit.h>

#import "AppDelegate.h"

int main(int argc, char* argv[])
{
    @try {
        @autoreleasepool
        {
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        }
    }
    @catch (NSException* exception)
    {
        Log(@"Exception=%@\nStack Trace:%@", exception, [exception callStackSymbols]);
    }
}
Tetapi ingat untuk memadamkan pakej try catch sebelum menerbitkan apl, sayang~~~

大家讲道理

[UITableView registerClass:forCellReuseIdentifier:] Sesuatu telah berlaku di sini!

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan