क्या प्रोग्राम को ब्रेकपॉइंट सक्षम करने का एक तरीका है? आम तौर पर मैं एक ब्रेकपॉइंट की स्थिति का उपयोग करता हूं, लेकिन मुझे एक प्रतीकात्मक ब्रेकपॉइंट का उपयोग करने की आवश्यकता है।

विशेष रूप से, कुछ मेरे UIScrollView के contentOffset कॉल को scrollToIndexPath और reloadData के बीच कॉल में बदल रहा है। मैं scrollToIndexPath कॉल के बाद केवल प्रतीकात्मक विराम बिंदु को सक्षम करना चाहूंगा।

5
bcattle 2 पद 2015, 02:08

2 जवाब

सबसे बढ़िया उत्तर

जिम इंगम का जवाब x86 सिस्टम पर काम करता है। एक आईओएस डिवाइस के लिए, मैं प्रोग्राम को ब्रेकपॉइंट बनाने के लिए इस उत्तर में वर्णित विधि का उपयोग करने में सक्षम था। लाइन लगाना

asm("svc 0");

XCode में निम्न निर्देश पर रुकने के लिए डिबगर का कारण बनता है।

enter image description here

दिलचस्प बात यह है कि यदि आप XCode से कनेक्ट नहीं हैं तो प्रोग्राम सामान्य रूप से निष्पादित होता है।

4
Community 23 मई 2017, 10:29

आप __builtin_trap () का उपयोग करके ऐसा कर सकते हैं। X86 सिस्टम पर, आपको जाल को मारने के बाद पीसी को मैन्युअल रूप से समायोजित करना होगा। लेकिन ऐसा करना बहुत आसान है, और कभी-कभी उपयोगी होता है यदि आपके पास कोड है जो बहुत हिट हो जाता है और आपको केवल कुछ जटिल परिस्थितियों में फंसने की आवश्यकता होती है। कुछ इस तरह:

 > lldb trapit
(lldb) target create "trapit"
Current executable set to 'trapit' (x86_64).
(lldb) run
Process 63363 launched: '/private/tmp/trapit' (x86_64)
About to trap.
Process 63363 stopped
* thread #1: tid = 0x2054b7, function: main , stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
    frame #0: 0x0000000100000f4d trapit`main at trapit.c:6
   3    int main()
   4    {
   5      printf ("About to trap.\n");
-> 6      __builtin_trap();
   7      printf("Trapped.\n");
   8    }
(lldb) dis -f
trapit`main:
    0x100000f30 <+0>:  pushq  %rbp
    0x100000f31 <+1>:  movq   %rsp, %rbp
    0x100000f34 <+4>:  subq   $0x10, %rsp
    0x100000f38 <+8>:  leaq   0x47(%rip), %rdi          ; "About to trap.\n"
    0x100000f3f <+15>: movb   $0x0, %al
    0x100000f41 <+17>: callq  0x100000f66               ; symbol stub for: printf
    0x100000f46 <+22>: leaq   0x49(%rip), %rdi          ; "Trapped.\n"
->  0x100000f4d <+29>: ud2    
    0x100000f4f <+31>: movl   %eax, -0x4(%rbp)
    0x100000f52 <+34>: movb   $0x0, %al
    0x100000f54 <+36>: callq  0x100000f66               ; symbol stub for: printf
    0x100000f59 <+41>: xorl   %ecx, %ecx
    0x100000f5b <+43>: movl   %eax, -0x8(%rbp)
    0x100000f5e <+46>: movl   %ecx, %eax
    0x100000f60 <+48>: addq   $0x10, %rsp
    0x100000f64 <+52>: popq   %rbp
    0x100000f65 <+53>: retq   
(lldb) reg write pc 0x100000f4f
(lldb) c
Process 63363 resuming
Trapped.
Process 63363 exited with status = 0 (0x00000000) 
1
Jim Ingham 3 पद 2015, 00:01