【发布时间】:2015-01-15 23:11:20
【问题描述】:
我正在尝试运行一些别人给我的 C++ 代码。起初,istream 文件的链接断开了,我通过添加包含路径来修复它:
C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\include\dinkumware
代码现在可以编译,但它不会在任何断点处停止,例如formcreate 中的断点:
// Initialise the form and read in the module and inverter names.
void __fastcall TMain::FormCreate(TObject *Sender)
{
ifstream inits;
ifstream inverters;
ifstream modules;
char line[1000];
AnsiString FTO;
inits.open("PVSM.ini", ios::in);
if (inits.is_open())
{
inits.getline(line,1000);
AnsiString parmm(line);
ModDir = parmm.SubString(1,parmm.Pos(" ")-1);
inits.getline(line,1000);
AnsiString parmi(line);
InvDir = parmi.SubString(1,parmi.Pos(" ")-1);
inits.getline(line,1000);
AnsiString parmt(line);
MetDir = parmt.SubString(1,parmt.Pos(" ")-1);
inits.getline(line,1000);
AnsiString parms(line);
ShdDir = parms.SubString(1,parms.Pos(" ")-1);
inits.getline(line,1000);
AnsiString parmx(line);
ExpDir = parmx.SubString(1,parmx.Pos(" ")-1);
}
else // Should never get here, but if ini file missing use defaults
{
ModDir = "C://";
InvDir = "C://";
MetDir = "C://";
ShdDir = "C://";
}
inits.close();
FTO = InvDir + "inverters.data";
inverters.open(FTO.c_str(), ios::in);
if (inverters.is_open())
{
while ( inverters.getline(line,1000) )
{
AnsiString inverter(line);
IVBox->Items->Add(inverter);
}
}
inverters.close();
FTO = ModDir + "modules.data";
modules.open(FTO.c_str(), ios::in);
if (modules.is_open())
{
while ( modules.getline(line,1000) )
{
AnsiString module(line);
ModBox->Items->Add(module);
}
}
modules.close();
CMod = 1;
CStr = 1;
CCell = 1;
nStore = 0;
grid = true;
pasan = false;
debug = false;
calc = false;
cell = false;
module = false;
array1 = false;
inv = false;
PV = true;
Parray = false;
Pcurve = false;
LastType = 'X';
CurrTp = -1; //* Not currently set
AllSame = true;
LdMeteo = false;
mpp = true;
}
它只是打开表单,就好像它是从 .exe 文件运行一样,除了它显示
正在编译 MyProject.cbproj(发布配置).... 成功
在消息栏中
我尝试从发布模式切换到调试模式,尝试更改输出目录以便编译新的.obj 文件。没有成功。
我正在运行Rad studio 2010,它最初是用XE5 编写的,但我认为这是文件夹结构而不是IDE 版本的问题?
有什么建议吗?
【问题讨论】:
-
在发布版本中,许多断点不能被命中,因为该代码是内联的。调试 Debug 构建(或非优化版本,如果这对您的上下文有意义),或者在 不能 内联的地方设置断点并从那里开始,或者学习阅读程序集并设置断点在那里。
-
formcreate 方法只被调用一次并且没有被标记为内联。我无法想象它会被编译器自动内联?
-
通过“标记”,我假设你的意思是 declare - 如果你 声明它
inline,它仍然只是一个 hint - 编译器几乎总是比开发人员更清楚什么时候应该内联或不内联。也就是说,请粘贴formcreate函数,我们很可能能够判断它是否可能被内联。 -
感谢 Johann,我已将代码添加到原始问题中
标签: c++ debugging c++builder breakpoints c++builder-2010