簡體   English   中英

“ svc#128”意外闖入調試器-如何調試?

[英]“svc #128” breaking in to debugger unexpectedly - how to debug?

有一系列StackOverflow問題,提到在svc #128指令后意外插入調試器。 我本人在處理此問題時,想問一些有關何時以及為什么發生這種情況的一般性問題。

  • 詳細地說,iOS中使用的svc #128是什么?
  • 是什么導致它闖入調試器?
  • 有沒有一種方法可以抑制開發期間闖入調試器?
  • 可能的方法來調試此問題的根本原因?
  • 人們過去使用過成功的修補程序嗎?

svc #128svc 0x80調用是ARM指令集中的“ Supervisor Call ”(《 ARM文檔》 )。 您需要查看寄存器值以指示正在調用的內容。

匯編程序示例:

libsystem_kernel.dylib`__pthread_kill:
0x195557268:  movz   x16, #328                 // NOTE THIS VALUE
0x19555726c:  svc    #128
0x195557270:  b.cc   0x195557288               ; __pthread_kill + 32
...

在“ 內核系統調用”表中查找movz值(在這種情況下為#328 )。 對於#328 ,它對應於pthread_kill ,它與上面列出的方法名稱匹配。 調用該中斷時,該中斷將緊接svc之后的指令,在本例中為b.cc指令。

注意,LLDB也會中斷某些線程到線程的信號,例如SIGUSR2,即使它是有意且正確的。 您可以配置Xcode忽略它並繼續執行而不會出現問題:

永久配置LLDB(在Xcode 4.3.2中)不停止信號

感謝Notlikethat的投入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM