Полный файл GDB не загружается - PullRequest
0 голосов
/ 14 октября 2019

Я использовал Visual Studio 2013 для компиляции и отладки программы на Си. Затем скомпилировал ту же программу в gcc и попытался отладить, но по какой-то причине я не могу перейти к определенной строке. Сообщение, которое я получаю, не является строкой номер_строки в текущем файле.

Вот код C

#include<stdio.h>

int main() {
    while (1) { 
    }
    printf("Hello World!");
    printf("Bye World!");
    return 0;
}

Теперь для вышеуказанного кода в VS 2013 я могучтобы переместить желтую стрелку и заставить ее указывать на функцию печати, но в случае GDB я не могу использовать jump для перехода к функции печати. ​​

Я использовал gcc -g file.c -o file для компиляции моего C-файла. Я предполагаю, что поскольку это бесконечный цикл, некоторая оптимизация показывает только инструкции до цикла.

Редактировать:

Я использовал команды GDB:

1) GDB 2) файл exec_name3) разбить номер строки 4) запустить 5) перейти номер строки

Если я изменю цикл на

int x = 1;
while (x) {
}

Прыжок работает нормально

1 Ответ

2 голосов
/ 14 октября 2019

в случае GDB Я не могу использовать переход для перехода к функции печати

Это связано с тем, что GCC не генерирует недоступный код даже при оптимизации, отключенной с помощью -O0. Смотрите это на godbolt: https://godbolt.org/z/lpXNmn. Вы можете перейти в Visual Studio, потому что код выдается: https://godbolt.org/z/7452oP. Кажется, что нет никакого способа заставить GCC также испускать этот недоступный код. И на самом деле нет смысла испускать его для этого искусственного примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...