GDB пропускает инструкции

Вы должны увеличить память драйвера. Думаю, в вашей папке $ SPARK_HOME / conf вы должны найти файл spark-defaults.conf, отредактировать и установить spark.driver.memory 4000m в зависимости от памяти вашего хозяина. Это то, что исправило проблему для меня, и все работает гладко

0
задан Joshua Gevirtz 15 January 2019 в 20:55
поделиться

2 ответа

Я думал, что gbd все еще может выполнять инструкции

Может, но команда для этого - stepi, а не step, которую вы используете.

Шаг за шагом строк , что требует наличия отладочной информации в источниках.

0
ответ дан Employed Russian 15 January 2019 в 20:55
поделиться

Немного об оптимизации

Например, это код C:

int main(int argc, char** argv) {
  printf("Hello World\n");
  return 0;
}

Когда вы сборка с -O0, оптимизация кода выполняется очень редко, а код выполняется очень медленно. Это неоптимизированный код (gcc -m32):

; Variables:
        ;    arg_4: 12
        ;    arg_0: 8
        ;    var_4: -4
        ;    var_8: -8
        ;    var_C: -12
        ;    var_10: -16
        ;    var_18: -24
push       ebp
mov        ebp, esp
sub        esp, 0x18
call       _main+11
pop        eax                            ; CODE XREF=_main+6

-- These lines are gone after optimization --
mov        ecx, dword [ebp+arg_4]
mov        edx, dword [ebp+arg_0]
--                                    --
lea        eax, dword [eax-0x1f5b+0x1fa6] ; "Hello World!\\n"

-- There lines are gone after optimization --
mov        dword [ebp+var_4], 0x0
mov        dword [ebp+var_8], edx
mov        dword [ebp+var_C], ecx

mov        dword [esp+0x18+var_18], eax  ; method imp___symbol_stub__printf
call       imp___symbol_stub__printf
xor        ecx, ecx                           
mov        dword [ebp+var_10], eax
mov        eax, ecx                                    
add        esp, 0x18                           
pop        ebp
ret

При сборке с -03 вы заметите, что строк меньше. Оптимизированный код (gcc -m32 -O3):

push       ebp
mov        ebp, esp
sub        esp, 0x8
call       _main+11
pop        eax                             ; CODE XREF=_main+6
lea        eax, dword [eax-0x1f6b+0x1f9e]  ; "Hello World!"
mov        dword [esp+0x8+var_8], eax      ; "%s" for imp___symbol_stub__puts
call       imp___symbol_stub__puts
xor        eax, eax
add        esp, 0x8
pop        eep
ret

Причина, по которой неоптимизированный код имеет ненужные строки, заключается в том, что main принимает два аргумента и сохраняет их в регистры независимо от того, используете ли вы или не без оптимизации, но при оптимизации компилятор удаляет эти инструкции mov, потому что аргументы не используются и не нужны. Аналогично, значения регистров также сохраняются в переменных стека, поскольку аргументы копируются в переменные стека.

0
ответ дан Tyson90 15 January 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: