我的进程启动子进程,我也想在OS X上使用LLDB调试这些进程.我在调试器中找不到任何自动附加选项.怎么做?
是否可以在Mac OS X下使用终端命令行中的GDB或LLDB来调试在iOS模拟器上运行的应用程序?(例如,不是来自Xcode的GUI或控制台,而是使用外部命令行或进程).如果是这样,怎么样?
一段时间以来,我一直在努力解决一个奇怪的问题.在最初关闭iOS模拟器的情况下运行我的应用程序时,它会正确启动.但是,如果我再次运行它而不关闭模拟器,它会崩溃并在错误日志中打印(lldb).如果我再次运行它(不关闭模拟器)它会正确启动.如果我再次这样做,它会崩溃.所以似乎每隔一段时间.它在使用iOS设备时有效,而且我有一个完全相同的项目的大学,在iOS模拟器中没有遇到这个问题.我尝试过的是清理,重置内容和设置,手动删除应用程序,重新启动计算机并重新安装Xcode.
假设我有一个变量,self.position每当它改变它的值时,我如何让Xcode中断(许多方法可以改变它).
我在Xcode中使用lldb,我的一个变量包含大量的JSON数据.使用po myVar对分析这些数据没有多大帮助,因为它将在微小的Xcode调试控制台中输出.
有没有办法将lldb输出重定向到文件?
我在这里看到这样的功能似乎在gdb上可用:
(gdb) set logging on
(gdb) set logging file /tmp/mem.txt
(gdb) x/512bx 0xbffff3c0
(gdb) set logging off
Run Code Online (Sandbox Code Playgroud)
并在lldb中"翻译"为:
(lldb) memory read --outfile /tmp/mem.txt --count 512 0xbffff3c0
(lldb) me r -o/tmp/mem.txt -c512 0xbffff3c0
(lldb) x/512bx -o/tmp/mem.txt 0xbffff3c0
Run Code Online (Sandbox Code Playgroud)
但是,该memory read命令对我的情况没有帮助,并且--outfile似乎没有可用于该print命令.
为什么这不起作用?
(lldb) po [NSString stringWithFormat:@"%f", 1.0]
error: too many arguments to method call, expected 1, have 2
error: 1 errors parsing expression
Run Code Online (Sandbox Code Playgroud)
但这样做:
(lldb) p (void)printf("%f", 1.0)
1.000000
Run Code Online (Sandbox Code Playgroud)
LLDB中不支持Objective-C变量参数语法吗?
Android Studio不会在C++代码中的断点处停止,这是我到目前为止所做的:
在AndroidManifest.xml中:
android:debuggable="true"
Run Code Online (Sandbox Code Playgroud)在build.gradle中(这可能是问题):
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = []
}
task ndkBuild(type: Exec) {
commandLine android.ndkDirectory.getAbsolutePath() + '\\' + 'ndk-build.cmd', '-C', file('src/main/jni').absolutePath, 'NDK_DEBUG=1'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
Run Code Online (Sandbox Code Playgroud)
在Android Studio上将应用程序配置为本机应用程序
在C++代码中放置断点
调试应用程序
这似乎有效,因为它说:"现在启动本机调试会话"而且我可以使用停止按钮暂停应用程序,但没有断点工作.
谢谢您的帮助
给出以下Swift代码,保存在bug.swift中,并使用Xcode 8.2.1或Xcode 8.3 beta 2:
import Foundation
protocol MyProtocol {
func foo() -> String
}
extension MyProtocol {
func foo() -> String {
return "\(self)"
}
}
extension String: MyProtocol {}
extension NSAttributedString: MyProtocol {}
let normal = "normal".foo()
let attributed = NSAttributedString(string: "attributed", attributes: [:]).foo()
Run Code Online (Sandbox Code Playgroud)
运行以下命令:
swiftc -g bug.swift
lldb bug
Run Code Online (Sandbox Code Playgroud)
LLDB启动.现在,运行这些命令,并观察输出.我通过的地方9,传递bug.swift包含的内容return "\(self)":
(lldb) target create "bug"
Current executable set to 'bug' (x86_64).
(lldb) b 9
Breakpoint 1: where = bug`(extension in bug):bug.MyProtocol.foo …Run Code Online (Sandbox Code Playgroud) 随着从gdb到lldb的新变化,我找不到如何在某些内存地址上设置监视点的方法.
在gdb中我使用了这个
watch -location *0x123456
Run Code Online (Sandbox Code Playgroud)
在lldb中做同样的事情
w s e *0x123456
Run Code Online (Sandbox Code Playgroud)
不适合我.那么我可以用什么在lldb中运行相同的命令呢?