我有一个名为 A.class 的hello world程序。它是使用命令nextLine()
编译的。它只需打印" hello world" 。
接下来,我使用javac A.java
编译。我期待看到行号,但无法看到。知道发生了什么事吗?
我确实看到javac编译的.class文件和javac -g编译的.class文件之间的某些特殊字符存在细微差别。但我看不到任何行号。
我对此的好奇是因为我想找出行数对性能有何影响。其次,我想知道log4j等如何维护日志记录的行号。感谢。
答案 0 :(得分:4)
编译命令很好,class CCitiesTable : public CTable<CAccessor<CCitiesTableAccessor> >
{
public:
bool SelectAll(CCitiesArray& oCitiesArray)
{
CDataSource oDataSource;
CSession oSession;
CCitiesTable oCitiesTable;
try
{
HRESULT hResult = CoInitialize(0);
if (FAILED(hResult))
{
//Message( _T("Unable to CoInitialize COM Interface.") );
return FALSE;
}
CDBPropSet oDBPropSet(DBPROPSET_DBINIT);
oDBPropSet.AddProperty(DBPROP_INIT_DATASOURCE, _T("LENOVO2\\SQL2008") ); // сървър
oDBPropSet.AddProperty(DBPROP_AUTH_USERID, _T("sa") );
oDBPropSet.AddProperty(DBPROP_AUTH_PASSWORD, _T("massive") );
oDBPropSet.AddProperty(DBPROP_INIT_CATALOG, _T("PhoneBookDB" ));
oDBPropSet.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
oDBPropSet.AddProperty(DBPROP_INIT_LCID, 1033L);
oDBPropSet.AddProperty(DBPROP_INIT_PROMPT, static_cast<short>(4));
// Свързваме се към базата данни
hResult = oDataSource.Open(_T("SQLOLEDB.1"), &oDBPropSet);
if (FAILED(hResult))
{
//Message(_T("Unable to connect to SQL Server database. Error: %d"), hResult);
return FALSE;
}
//Open session
hResult = oSession.Open(oDataSource);
if (FAILED(hResult))
{
//Message(_T("Unable to open session. Error: %d"), hResult);
oDataSource.Close();
return FALSE;
}
//Make query
CString strQuery;
strQuery = _T("SELECT * FROM dbo.CITIES");
// Execute query
hResult = oCitiesTable.Open(oSession, strQuery);
确实会生成调试信息。顺便说一句:默认情况下会生成行号,需要-g
或类似名称才能将其关闭。
缺少的是一种有意义地检查生成的-g:none
文件的方法,类似于工具使用它的方式。尝试:
.class
$ javap -l -c A.class
打开行号表的打印。
-l
打开反汇编的字节码指令的打印(可能很有趣,因为行号表将源行号与字节码指令相关联)。