From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Linas Vepstas Newsgroups: gmane.lisp.guile.user,gmane.comp.cad.geda.devel Subject: Re: Help needed debugging segfault with Guile 1.8.7 Date: Sun, 28 Nov 2010 11:21:30 -0600 Message-ID: References: <871v6sqbny.fsf@ambire.localdomain> <8739ql38pe.fsf@ossau.uklinux.net> Reply-To: linasvepstas@gmail.com NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=20cf30433e42ed4aa604962030bb X-Trace: dough.gmane.org 1290964926 11539 80.91.229.12 (28 Nov 2010 17:22:06 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sun, 28 Nov 2010 17:22:06 +0000 (UTC) Cc: guile-user@gnu.org, Peter Brett , geda-dev@seul.org To: Neil Jerram Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Sun Nov 28 18:22:01 2010 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1PMkwq-0001V8-Rk for guile-user@m.gmane.org; Sun, 28 Nov 2010 18:22:01 +0100 Original-Received: from localhost ([127.0.0.1]:59884 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PMkwq-0005Rz-8b for guile-user@m.gmane.org; Sun, 28 Nov 2010 12:22:00 -0500 Original-Received: from [140.186.70.92] (port=48235 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PMkwk-0005R1-Hp for guile-user@gnu.org; Sun, 28 Nov 2010 12:21:55 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PMkwi-0006KB-9y for guile-user@gnu.org; Sun, 28 Nov 2010 12:21:54 -0500 Original-Received: from mail-fx0-f41.google.com ([209.85.161.41]:61707) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PMkwh-0006K7-V0 for guile-user@gnu.org; Sun, 28 Nov 2010 12:21:52 -0500 Original-Received: by fxm13 with SMTP id 13so3337991fxm.0 for ; Sun, 28 Nov 2010 09:21:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:reply-to :in-reply-to:references:from:date:message-id:subject:to:cc :content-type; bh=7WkGwCMdREUSLAXgsYvcJiipZ3og5f8FwiytP9tLSUA=; b=wMUur2hhC7VZzbgQnfSHsJs3mENEnessL4++gvhq9J1qThQ/j/kmzVSH2wTr+4nebb xG+0UQdFy3TeSIhplRP58r211h1vFYGXkZxRjOvkj/P+aXQkHfA7qMv77p5mCELXZTUy a19Y0HIjGGguCcqHK3zvabF5fSsp96OQUr038= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:reply-to:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; b=dc8HU2mtbCGswPhESXPTP3fOXgoXCQL/UgBPvgLY4fAvwtnsJyxocPsPkQC7hUYoBD mJffUCPyCzZjvVoa/+t91VUcjLMn3W2pNHI0QCZKiLUDXdtwZLBzVj+xSrUBhvlHXt1H I8cyo8JphCVeg2zL452DnnSLWkbmy0d7Hq8FU= Original-Received: by 10.223.93.206 with SMTP id w14mr4350588fam.71.1290964910819; Sun, 28 Nov 2010 09:21:50 -0800 (PST) Original-Received: by 10.223.71.205 with HTTP; Sun, 28 Nov 2010 09:21:30 -0800 (PST) In-Reply-To: <8739ql38pe.fsf@ossau.uklinux.net> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-user-bounces+guile-user=m.gmane.org@gnu.org Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.user:8246 gmane.comp.cad.geda.devel:9048 Archived-At: --20cf30433e42ed4aa604962030bb Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 28 November 2010 05:38, Neil Jerram wrote: > Peter Brett writes: > >> Sure. =C2=A0libgeda uses direct management of memory, and the structures= used >> in its document object model need to be explicitly deleted when finished >> with. =C2=A0I decided to use a Guile smob to represent these structures = for >> access from Scheme code, with the pointer to the actual structure in >> SCM_SMOB_DATA and with the low nibble of SCM_SMOB_FLAGS indicating which >> type of DOM structure the smob references. >> >> This would have been sufficient if Scheme code had only been working >> with libgeda DOMs created and managed entirely via Scheme code. [...] > > I think your design is similar to what is outlined in the `Extending > Dia' node of the Guile manual. =C2=A0Were you aware of that doc before > working out your design? =C2=A0If not, I guess we need to make it more > prominent. =C2=A0If yes, I'd appreciate any suggestions you have for how = it > may be improved. Yes, I code almost entirely 'by example', so having a good cookbook is critical for me. I haven't read 'Extending Dia' before, its probably more recent than the last time I set up guile bindings, some 2-3 years ago; I skimmed it briefly just now. Several comments on example code: 1) its typically not possible to wrap the C main(), so having a well-define= d init() that happens some time later would be best. 2) http://www.gnu.org/software/guile/manual/html_node/Dia-Hook.html is lame. What I have to do is this: SCM rc =3D scm_c_catch (SCM_BOOL_T, (scm_t_catch_body) scm_c_eval_string, (void *) expr_str, SchemeEval::catch_handler_wrapper, this, SchemeEval::preunwind_handler_wrapper, this); and my catch_handler and preunwind_handler are fairly involved. Basically, if you are going to let users enter arbitrary scheme into your app, they *will* enter malformed, broken expressions, and you have to deal with these. Among other things, you have to give them a clue as to what the error was -- some sort of trace, error reporting. For me, this was implementing a REPL loop look-alike in my app. I can't say "work-alike", I think mine *almost* works-alike, but not sure. It took me a *long* time to figure out I needed the pre-unwind version of things, and even then, it took me a fair amount of effort to figure out what to put in there. Having a section showing how to implement a repl-work-alike loop in one's app, with reasonable debugging/stack-printing output, would be nice to have. Figuring out how to do this one one's own requires a lot of tenacity. For the record, I've attched the code I wrote to do the above (and to multi-thread, which someone later on disabled :-( Its in C++, sorry about that, don't blame me.) --linas --20cf30433e42ed4aa604962030bb Content-Type: text/x-chdr; charset=US-ASCII; name="SchemeEval.h" Content-Disposition: attachment; filename="SchemeEval.h" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gh26xuip0 LyoKICogU2NoZW1lRXZhbC5oCiAqCiAqIFNpbXBsZSBzY2hlbWUgZXhwcmVzc2lvbiBldmFsdWF0 b3IKICogQ29weXJpZ2h0IChjKSAyMDA4IExpbmFzIFZlcHN0YXMgPGxpbmFzQGxpbmFzLm9yZz4K ICovCgojaWZuZGVmIE9QRU5DT0dfU0NIRU1FX0VWQUxfSAojZGVmaW5lIE9QRU5DT0dfU0NIRU1F X0VWQUxfSAojaWZkZWYgSEFWRV9HVUlMRQoKI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHB0 aHJlYWQuaD4KI2luY2x1ZGUgPGxpYmd1aWxlLmg+CiNpbmNsdWRlIDxvcGVuY29nL2F0b21zcGFj ZS9IYW5kbGUuaD4KCm5hbWVzcGFjZSBvcGVuY29nIHsKCmNsYXNzIFNjaGVtZUV2YWwKewoJcHJp dmF0ZToKCQkvLyBJbml0aWFsaXphdGlvbiBzdHVmZgoJCXZvaWQgaW5pdCh2b2lkKTsKCQlzdGF0 aWMgdm9pZCAqIGNfd3JhcF9pbml0KHZvaWQgKik7CgkJdm9pZCBwZXJfdGhyZWFkX2luaXQodm9p ZCk7CgkJdm9pZCB0aHJlYWRfbG9jayh2b2lkKTsKCQl2b2lkIHRocmVhZF91bmxvY2sodm9pZCk7 CgkKCQkvLyBkZXN0cnVjdG9yIHN0dWZmCgkJdm9pZCBmaW5pc2godm9pZCk7CgkJc3RhdGljIHZv aWQgKiBjX3dyYXBfZmluaXNoKHZvaWQgKik7CgkKCQkvLyBUaGluZ3MgcmVsYXRlZCB0byBldmFs dWF0aW9uCgkJc3RkOjpzdHJpbmcgZG9fZXZhbChjb25zdCBzdGQ6OnN0cmluZyAmKTsKCQlzdGF0 aWMgdm9pZCAqIGNfd3JhcF9ldmFsKHZvaWQgKik7CgkJc3RhdGljIHZvaWQgKiBjX3dyYXBfZXZh bF9oKHZvaWQgKik7CgkJY29uc3Qgc3RkOjpzdHJpbmcgKnBleHByOwoJCXN0ZDo6c3RyaW5nIGFu c3dlcjsKCQkKCQlzdGQ6OnN0cmluZyBpbnB1dF9saW5lOwoJCWJvb2wgcGVuZGluZ19pbnB1dDsK CQoJCS8vIHN0cmFpZ2h0LXVwIGV2YWx1YXRpb24KCQlzdGF0aWMgU0NNIHdyYXBfc2NtX2V2YWwo dm9pZCAqKTsKCQlTQ00gZG9fc2NtX2V2YWwoU0NNKTsKCQlTQ00gZG9fc2NtX2V2YWxfc3RyKGNv bnN0IHN0ZDo6c3RyaW5nICYpOwoJCgkJLy8gSGFuZGxlIGFwcGx5CgkJSGFuZGxlIGRvX2FwcGx5 KGNvbnN0IHN0ZDo6c3RyaW5nJiBmdW5jLCBIYW5kbGUgdmFyYXJncyk7CgkJU0NNIGRvX2FwcGx5 X3NjbShjb25zdCBzdGQ6OnN0cmluZyYgZnVuYywgSGFuZGxlIHZhcmFyZ3MpOwoJCUhhbmRsZSBo YXJnczsKCQlzdGF0aWMgdm9pZCAqIGNfd3JhcF9hcHBseSh2b2lkICopOwoJCXN0YXRpYyB2b2lk ICogY193cmFwX2FwcGx5X3NjbSh2b2lkICopOwoJCgkJLy8gRXJyb3IgaGFuZGxpbmcgc3R1ZmYK CQlTQ00gZXJyb3Jfc3RyaW5nX3BvcnQ7CgkJU0NNIGNhcHR1cmVkX3N0YWNrOwoJCXN0YXRpYyBT Q00gcHJldW53aW5kX2hhbmRsZXJfd3JhcHBlcih2b2lkICosIFNDTSwgU0NNKTsKCQlzdGF0aWMg U0NNIGNhdGNoX2hhbmRsZXJfd3JhcHBlcih2b2lkICosIFNDTSwgU0NNKTsKCQlTQ00gcHJldW53 aW5kX2hhbmRsZXIoU0NNLCBTQ00pOwoJCVNDTSBjYXRjaF9oYW5kbGVyKFNDTSwgU0NNKTsKCQli b29sIGNhdWdodF9lcnJvcjsKCQoJCS8vIHByaW50aW5nIG9mIGJhc2ljIHR5cGVzCgkJc3RhdGlj IHN0ZDo6c3RyaW5nIHBydChTQ00pOwoJCgkJLy8gb3V0cHV0IHBvcnQKCQlTQ00gb3V0cG9ydDsK CQlTQ00gc2F2ZWRfb3V0cG9ydDsKCQoJCS8vIE1ha2UgY29uc3RydWN0b3IsIGRlc3RydWN0b3Ig cHJpdmF0ZTsgZm9yY2UKCQkvLyBldmVyeW9uZSB0byB1c2UgdGhlIHNpbmdsZXRvbiBpbnN0YW5j ZSwgZm9yIG5vdy4KCQlTY2hlbWVFdmFsKHZvaWQpOwoJCX5TY2hlbWVFdmFsKCk7CgkJc3RhdGlj IFNjaGVtZUV2YWwqIHNpbmdsZXRvbkluc3RhbmNlOwoJCQoJcHVibGljOgoJCQkJCQoJCXN0ZDo6 c3RyaW5nIGV2YWwoY29uc3Qgc3RkOjpzdHJpbmcgJik7CgkJSGFuZGxlIGV2YWxfaChjb25zdCBz dGQ6OnN0cmluZyAmKTsKCQlIYW5kbGUgYXBwbHkoY29uc3Qgc3RkOjpzdHJpbmcmIGZ1bmMsIEhh bmRsZSB2YXJhcmdzKTsKCQlzdGQ6OnN0cmluZyBhcHBseV9nZW5lcmljKGNvbnN0IHN0ZDo6c3Ry aW5nJiBmdW5jLCBIYW5kbGUgdmFyYXJncyk7CgkKCQlib29sIGlucHV0X3BlbmRpbmcodm9pZCk7 CgkJdm9pZCBjbGVhcl9wZW5kaW5nKHZvaWQpOwoJCWJvb2wgZXZhbF9lcnJvcih2b2lkKTsKCQoJ CS8vIFNvbWVvbmUgdGhpbmtzIHRoYXQgdGhlcmUgc29tZSBzY2hlbWUgdGhyZWFkaW5nIGJ1ZyBz b21ld2hlcmUsCgkJLy8gYW5kIHRoZSBjdXJyZW50IGhhY2sgYXJvdW5kIHRoaXMgaXMgdG8gdXNl IGEgc2luZ2xldG9uIGluc3RhbmNlLgoJCXN0YXRpYyBTY2hlbWVFdmFsJiBpbnN0YW5jZSh2b2lk KQoJCXsKCQkJaWYgKCFzaW5nbGV0b25JbnN0YW5jZSkgCgkJCQlzaW5nbGV0b25JbnN0YW5jZSA9 IG5ldyBTY2hlbWVFdmFsKCk7CgkJCXJldHVybiAqc2luZ2xldG9uSW5zdGFuY2U7CgkJfQp9OwoK fQoKI2Vsc2UgLyogSEFWRV9HVUlMRSAqLwoKI2luY2x1ZGUgPG9wZW5jb2cvYXRvbXNwYWNlL0hh bmRsZS5oPgoKbmFtZXNwYWNlIG9wZW5jb2cgewoKY2xhc3MgU2NoZW1lRXZhbAp7Cglwcml2YXRl OgoJCXN0YXRpYyBTY2hlbWVFdmFsKiBzaW5nbGV0b25JbnN0YW5jZTsKCXB1YmxpYzoKCQlzdGQ6 OnN0cmluZyBldmFsKGNvbnN0IHN0ZDo6c3RyaW5nICZzKSB7IHJldHVybiAiIjsgfQoJCUhhbmRs ZSBldmFsX2goY29uc3Qgc3RkOjpzdHJpbmcgJnMpIHsgcmV0dXJuIEhhbmRsZTo6VU5ERUZJTkVE OyB9CgkJSGFuZGxlIGFwcGx5KGNvbnN0IHN0ZDo6c3RyaW5nICZzLCBIYW5kbGUgYXJncykgewoJ CQlyZXR1cm4gSGFuZGxlOjpVTkRFRklORUQ7IH0KCQlzdGQ6OnN0cmluZyBhcHBseV9nZW5lcmlj KGNvbnN0IHN0ZDo6c3RyaW5nJiBmLCBIYW5kbGUgYXJncykgewoJCQlyZXR1cm4gIiI7IH0KCQoJ CWJvb2wgaW5wdXRfcGVuZGluZyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQoJCXZvaWQgY2xlYXJf cGVuZGluZyh2b2lkKSB7fQoKCQkvLyBJZiBndWlsZSBpcyBub3QgaW5zdGFsbGVkLCB0aGVuICpl dmVyeSogY2FsbCB0byBldmFsX2Vycm9yKCkKCQkvLyBtdXN0IHJlcG9ydCB0aGF0IGFuIGVycm9y IG9jY3VycmVkISAKCQlib29sIGV2YWxfZXJyb3Iodm9pZCkgeyByZXR1cm4gdHJ1ZTsgfQoKCQlz dGF0aWMgU2NoZW1lRXZhbCYgaW5zdGFuY2Uodm9pZCkKCQl7CgkJCWlmICghc2luZ2xldG9uSW5z dGFuY2UpIAoJCQkJc2luZ2xldG9uSW5zdGFuY2UgPSBuZXcgU2NoZW1lRXZhbCgpOwoJCQlyZXR1 cm4gKnNpbmdsZXRvbkluc3RhbmNlOwoJCX0KfTsKCn0KI2VuZGlmLyogSEFWRV9HVUlMRSAqLwoj ZW5kaWYgLyogT1BFTkNPR19TQ0hFTUVfRVZBTF9IICovCg== --20cf30433e42ed4aa604962030bb Content-Type: text/x-c++src; charset=US-ASCII; name="SchemeExec.cc" Content-Disposition: attachment; filename="SchemeExec.cc" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gh26ziga1 LyoKICogU2NoZW1lRXhlYy5jYwogKgogKiBFeGVjdXRlIEV4ZWN1dGlvbkxpbmsncwogKiBDb3B5 cmlnaHQgKGMpIDIwMDkgTGluYXMgVmVwc3RhcyA8bGluYXN2ZXBzdGFzQGdtYWlsLmNvbT4KICov CgojaWZkZWYgSEFWRV9HVUlMRQoKI2luY2x1ZGUgPGxpYmd1aWxlLmg+CgojaW5jbHVkZSA8b3Bl bmNvZy9hdG9tc3BhY2UvTGluay5oPgojaW5jbHVkZSA8b3BlbmNvZy9zZXJ2ZXIvQ29nU2VydmVy Lmg+CgojaW5jbHVkZSA8Ym9vc3Qvc2hhcmVkX3B0ci5ocHA+CgojaW5jbHVkZSAiU2NoZW1lRXZh bC5oIgojaW5jbHVkZSAiU2NoZW1lU21vYi5oIgoKdXNpbmcgbmFtZXNwYWNlIG9wZW5jb2c7Cgov KioKICogZG9fYXBwbHkgLS0gYXBwbHkgbmFtZWQgZnVuY3Rpb24gZnVuYyB0byBhcmd1bWVudHMg aW4gTGlzdExpbmsKICogSXQgaXMgYXNzdW1lZCB0aGF0IHZhcmFyZ3MgaXMgYSBMaXN0TGluaywg Y29udGFpbmluZyBhIGxpc3Qgb2YKICogYXRvbSBoYW5kbGVzLiBUaGlzIGxpc3QgaXMgdW5wYWNr ZWQsIGFuZCB0aGVuIHRoZSBmdWN0aW9uIGZ1bmMKICogaXMgYXBwbGllZCB0byB0aGVtLiBJZiB0 aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhdG9tIGhhbmRsZSwgdGhlbgogKiB0aGlzIGlzIHJldHVy bmVkLgogKi8KSGFuZGxlIFNjaGVtZUV2YWw6OmRvX2FwcGx5KGNvbnN0IHN0ZDo6c3RyaW5nICZm dW5jLCBIYW5kbGUgdmFyYXJncykKewoJLy8gQXBwbHkgdGhlIGZ1bmN0aW9uIHRvIHRoZSBhcmdz CglTQ00gc3Jlc3VsdCA9IGRvX2FwcGx5X3NjbSAoZnVuYywgdmFyYXJncyk7CgkKCS8vIElmIHRo ZSByZXN1bHQgaXMgYSBoYW5kbGUsIHJldHVybiB0aGUgaGFuZGxlLgoJaWYgKCFTQ01fU01PQl9Q UkVESUNBVEUoU2NoZW1lU21vYjo6Y29nX2hhbmRsZV90YWcsIHNyZXN1bHQpKQoJewoJCXJldHVy biBIYW5kbGU6OlVOREVGSU5FRDsKCX0KCXJldHVybiBTY2hlbWVTbW9iOjpzY21fdG9faGFuZGxl KHNyZXN1bHQpOwp9CgovKioKICogZG9fYXBwbHlfc2NtIC0tIGFwcGx5IG5hbWVkIGZ1bmN0aW9u IGZ1bmMgdG8gYXJndW1lbnRzIGluIExpc3RMaW5rCiAqIEl0IGlzIGFzc3VtZWQgdGhhdCB2YXJh cmdzIGlzIGEgTGlzdExpbmssIGNvbnRhaW5pbmcgYSBsaXN0IG9mCiAqIGF0b20gaGFuZGxlcy4g VGhpcyBsaXN0IGlzIHVucGFja2VkLCBhbmQgdGhlbiB0aGUgZnVjdGlvbiBmdW5jCiAqIGlzIGFw cGxpZWQgdG8gdGhlbS4gVGhlIFNDTSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24gaXMg cmV0dXJuZWQuCiAqLwpTQ00gU2NoZW1lRXZhbDo6ZG9fYXBwbHlfc2NtKCBjb25zdCBzdGQ6OnN0 cmluZyYgZnVuYywgSGFuZGxlIHZhcmFyZ3MgKQp7CglTQ00gc2Z1bmMgPSBzY21fZnJvbV9sb2Nh bGVfc3ltYm9sKGZ1bmMuY19zdHIoKSk7CglTQ00gZXhwciA9IFNDTV9FT0w7CgkKCS8vIElmIHRo ZXJlIHdlcmUgYXJncywgcGFzcyB0aGUgYXJncyB0byB0aGUgZnVuY3Rpb24uCiAgICBib29zdDo6 c2hhcmVkX3B0cjxMaW5rPiBsYXJncyA9IGNvZ3NlcnZlcigpLmdldEF0b21TcGFjZSgpLT5jbG9u ZUxpbmsodmFyYXJncyk7CglpZiAobGFyZ3MpCgl7CgkJY29uc3Qgc3RkOjp2ZWN0b3I8SGFuZGxl PiAmb3NldCA9IGxhcmdzLT5nZXRPdXRnb2luZ1NldCgpOwoJCQoJCXNpemVfdCBzeiA9IG9zZXQu c2l6ZSgpOwoJCWZvciAoaW50IGk9c3otMTsgaT49MDsgaS0tKQoJCXsKCQkJSGFuZGxlIGggPSBv c2V0W2ldOwoJCQlTQ00gc2ggPSBTY2hlbWVTbW9iOjpoYW5kbGVfdG9fc2NtKGgpOwoJCQlleHBy ID0gc2NtX2NvbnMoc2gsIGV4cHIpOwoJCX0KCX0KCWV4cHIgPSBzY21fY29ucyhzZnVuYywgZXhw cik7CglyZXR1cm4gZG9fc2NtX2V2YWwoZXhwcik7Cn0KCiNlbmRpZgovKiA9PT09PT09PT09PT09 PT09PT09PT0gRU5EIE9GIEZJTEUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwo= --20cf30433e42ed4aa604962030bb--