在Visual Studio中,当您使用断点进行调试时,您可以通过将执行光标拖动到另一行来更改下一行代码.这可以让你跳过IF语句等.
我在想知道Delphi中是否有类似的功能,有人知道吗?
我一直在CPU窗口(Delphi 2006)中查看,但您似乎只能按顺序运行说明,而不是跳过它们.
我正在使用Delphi 6,我有一个应用程序,当关闭时会产生访问冲突错误.我们使用EurekaLog,因此我得到了用于调试的堆栈跟踪,但错误似乎每次都在不同的单元中随机出现,但总是在最终化部分中释放某些内容时.
我怎样才能调试这个以查看导致问题的原因?我不确定如何开始调试应用程序最终确定时发生的事情.
[编辑:]对不起,如果我不清楚,或许更好的问题是:如果我只想完成最终确定部分,那么开始使用断点进行调试的最佳位置是什么?这些错误似乎出现在我们使用的第三方组件(devexpress dx/cxgrid库)中,所以我想在Delphi开始在其他单元中调用finalize例程之前的最后一点开始调试我的代码.
我在通过SQL*PLUS编译Oracle触发器时遇到问题 - 我不认为我是愚蠢的但是我看不出问题是什么.
我们有一个安装程序脚本,它本质上是一个批处理文件,它通过在多个脚本上调用SQLPLUS来创建/刷新数据库中的所有对象,每个脚本包含一个视图,触发器等.首先创建表和视图,然后触发.此时V_BS_GRIDFIELDS可能会创建或不创建下面的视图,也可能稍后由其他过程创建.视图是一个可更新的视图,因此我们在其上放置了一个触发器以将更新推送到不同的表,如下所示:
CREATE OR REPLACE FORCE TRIGGER TR_INSTUPD_BS
INSTEAD OF INSERT OR UPDATE OR DELETE
ON V_BS_GRIDFIELDS
FOR EACH ROW
BEGIN
IF INSERTING OR DELETING THEN
NULL;
END IF;
IF UPDATING THEN
-- Can only change these fields
IF (:OLD.VISIBLE <> :NEW.VISIBLE) OR (:OLD.COMPULSORY <> :NEW.COMPULSORY) THEN
-- Source Table = BS_GRIDFIELDS
IF (:OLD.SOURCE_TYPE = 0) THEN
UPDATE BS_GRIDFIELDS BS_GF
SET BS_GF.VISIBLE = :NEW.VISIBLE,
BS_GF.COMPULSORY = :NEW.COMPULSORY
WHERE BS_GF.FIELD_NAME = :OLD.FIELD_NAME;
END IF;
END IF;
END …Run Code Online (Sandbox Code Playgroud) 对不起,如果这是一个愚蠢的问题,但这不是我以前必须做的事情.
是否可以在DLL中创建一个组件类,比如TPanel或TDBGrid的后代,然后在运行时将该DLL加载到另一个应用程序中,然后创建这些控件并像普通的Delphi组件一样使用它们?
如果是这样,你可以给我任何指示,看看从哪里开始这样做?
我们在Oracle DB中有一个表定义为:
CREATE TABLE AVALUES
(
ACODE VARCHAR2(4) NOT NULL,
ATYPE NUMBER NOT NULL,
ANAME VARCHAR2(50),
CREATED DATE DEFAULT SYSDATE
)
Run Code Online (Sandbox Code Playgroud)
在Delphi中,我们在类似于此的ADOQuery组件中有一个查询,它将值返回给我们的应用程序:
with qryComp do
begin
Close;
SQL.Text :=
'SELECT ATYPE FROM AVALUES ORDER BY CREATED';
Open;
while not EOF do
begin
AddComponents('NAME' + FieldByName('ATYPE').AsString);
Next;
end;
Close;
end;
Run Code Online (Sandbox Code Playgroud)
部署在许多不同的客户端PC上已经运行了好几年,我们的代码中没有任何内容发生变化.然而,在一些客户端PC上它最近开始返回,例如1.999999999969而不是2,这会导致应用程序崩溃.我们已经尝试寻找问题,但它是非常间歇性的 - 通过远程桌面连接到客户端计算机,我们根本无法复制它.
我可以采取哪些建议来进一步调查此事?因为它是间歇性的,只发生在几台计算机上,所以很难调试.我认为这可能是Oracle客户端的一个问题,但我不确定我们如何才能真正验证它.
谢谢你的帮助.
最好用一个例子来解释.给出以下数据库对象:
CREATE OR REPLACE PROCEDURE TEST_PROCEDURE IS
BEGIN
NULL;
END;
/
CREATE OR REPLACE FUNCTION TEST_FUNCTION RETURN NUMBER IS
BEGIN
RETURN NULL;
END;
/
CREATE OR REPLACE PACKAGE TEST_PACKAGE IS
PROCEDURE TEST_PROCEDURE;
FUNCTION TEST_FUNCTION RETURN NUMBER;
END TEST_PACKAGE;
/
CREATE OR REPLACE PACKAGE BODY TEST_PACKAGE IS
PROCEDURE TEST_PROCEDURE IS
BEGIN
NULL;
END;
FUNCTION TEST_FUNCTION RETURN NUMBER IS
BEGIN
RETURN NULL;
END;
END TEST_PACKAGE;
/
Run Code Online (Sandbox Code Playgroud)
如果我们在USERPROCEDURES中查询未打包的子程序,我们会在OBJECT_TYPE列中报告它们的类型:
但是,如果我们查询包中的子程序,我们只得到一个OBJECT_TYPE的包装,这是不是特别有用:
是否可以查询以找出实际类型而无需像通过USER_SOURCE挖掘一样?我查看了数据字典,但没有发现任何有用的东西.
谢谢你的帮助!