В приведенном выше примере, во-первых, похоже, что вы не создали свой код с отладочной информацией (передайте -g
вызовам вашего компилятора и убедитесь, что вы не удаляете свой двоичный файл). Вот почему, когда вы достигаете своей точки останова в main, вы видите только некоторую разборку, а не исходный код.
Если у вас была отладочная информация, то когда ваша программа достигнет точки останова в main, lldb покажет вам, что вы остановился в начале main, прежде чем ваша программа вызвала scanf
для запроса ввода. Вы просто должны быть в состоянии выполнить команду continue
в lldb, и ваша программа перейдет к вызову scanf и будет ждать вашего ввода.
Например, этот (предположительно ужасный код) работает в lldb:
> cat scant.c
#include <stdio.h>
int
main()
{
int i;
int buffer[2000];
int idx = 0;
while(scanf("%d", &i) != EOF) {
buffer[idx++] = i;
}
for(i = 0; i < idx; i++)
printf("%d: %d\n", i, buffer[i]);
return 0;
}
> clang -g -O0 scanit.c -o scanit
> lldb scanit
(lldb) target create "scanit"
Current executable set to '/tmp/scanit' (x86_64).
(lldb) break set -n main
Breakpoint 1: where = scanit`main + 41 at scanit.c:8:7, address = 0x0000000100000e89
(lldb) run
Process 74926 launched: '/tmp/scanit' (x86_64)
Process 74926 stopped
* thread #1 tid = 0x71d134 , queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000e89 scanit`main at scanit.c:8
5 {
6 int i;
7 int buffer[2000];
-> 8 int idx = 0;
^
9 while(scanf("%d", &i) != EOF) {
10 buffer[idx++] = i;
11 }
Target 0: (scanit) stopped.
(lldb) c
Process 74926 resuming
10 20 30 40 ^D
0: 10
1: 20
2: 30
3: 40
Process 74926 exited with status = 0 (0x00000000)
(lldb)
Чтобы правильно выбрать вход с терминала во время работы программы и предоставить его для вызова scanf
.
Из того, что я вижу, причина вашей путаницы что вы не создали свою программу с отладочной информацией, поэтому, когда вы остановились на исходной точке останова, вы не поняли, что просто еще не дошли до вызова scanf.