2015-12-28 1 views
-4

Я пытаюсь отлаживать статическую библиотеку, написанную на C с помощью программы Fortran, и две связаны с использованием взаимодействия Fortran C. Я использую Visual Studio 2013 в Windows.Точки останова нельзя увидеть при использовании совместимости С

Однако при вставке точки останова в C и создании нового .lib-файла и привязывании его к основной программе приложение Fortran не видит точку останова. Вот пример для простоты:

код C в статической библиотеке:

#include <stdio.h> 
void f() 
{ 
printf("Hello from C \n"); 

printf("Before breake point \n"); 
printf("At the breake point \n"); // breakpoint is inserted here 
printf("After breake point \n"); 
} 

Фортран код:

program test 
use, intrinsic :: iso_c_binding 
implicit none 

interface 
subroutine f() bind (C) 
use, intrinsic :: iso_c_binding 
end subroutine f 
end interface 

call f 
pause 
end program test 

.lib файл был создан в режиме отладки и Fortran кода также выполняются в режиме отладки. Любая идея, что я делаю неправильно?

(Пожалуйста, обратите внимание, что в приведенном выше примере это только для иллюстрации, а не фактический код, я пытаюсь отлаживать)

+2

Непонятно, какую toolchain вы используете, но поскольку вы упоминаете файлы '.lib', я полагаю, что это для Windows. Возможно, там все по-другому, но в мире, к которому я привык, точки останова не являются атрибутом скомпилированного кода, библиотеки или иным образом. Скорее, точки останова являются аспектом сеанса отладки - вы устанавливаете их в какой-то момент во время сеанса, и они не сохраняются до конца сеанса (хотя один сеанс может состоять из многих прогонов отлаживаемой программы). –

+0

Да, это Windows. Я использую визуальную студию 2013 – Anas

+1

Прошло много времени с тех пор, как я сделал какое-либо программирование на Windows, но в тот же день Visual Studio не была исключением из парадигмы, которую я описал в своем первом комментарии. Вы, кажется, предполагаете, что точки останова каким-то образом встроены в файл .lib', но это не так, как это работает в Unix, и как он когда-либо работал на Windows в моем теперь несколько отдаленном опыте. –

ответ

0

Так файл .lib нужен .pdb код, который будет создан. Поведение Visual Studio по умолчанию создает их как vcxx.pdb, которые могут быть перезаписаны последующими сборками. Это можно переименовать в. Lib.

После того как код был связан с DLL, DLL нуждается в отладочной информации, которая будет доступна. Это часть процесса сборки .dll.

И наконец, если все они исправлены, а точка останова все еще не работает, вставьте DebugBreak() в код, чтобы принудительно отключить отладчик.