> On 27 Jan 2022, at 07:46, Tony Flury <tony.fl...@btinternet.com> wrote:
> 
> 
> On 26/01/2022 22:41, Barry wrote:
>> 
>> 
>> Run python and your code under a debugger and check the ref count of the 
>> object as you step through the code.
>> 
>> Don’t just step through your code but also step through the C python code.
>> That will allow you to see how this works at a low level.
>> Setting a watch point on the ref count will allow you run the code and just 
>> break as the ref count changes.
>> 
>> That is what I do when a see odd c api behaviour.
>> 
>> Barry
> 
> 
> Thanks - I have tried a few times on a few projects to run a debugger in 
> mixed language mode and never had any success.
> 
> I will have to try again.

You mean debugging Python and C/C++? In this case your python code is a simple 
test script and it's C that you care about.
Should not be difficult. I tend to use linux as my lead debug platform as its 
the easiest to work with. But Windows and macOS
also have very good debuggers.

Barry

> 
> 
>>> As posted in the original message - immediately before the call to the C 
>>> function/method sys.getrefcount reports the count to be 2 (meaning it is 
>>> actually a 1).
>>> 
>>> Inside the C function the ref count is incremented and the Py_REFCNT macro 
>>> reports the count as 3 inside the C function as expected (1 for the name in 
>>> the Python code, 1 for the argument as passed to the C function, and 1 for 
>>> the increment), so outside the function one would expect the ref count to 
>>> now be 2 (since the reference caused by calling the function is then 
>>> reversed).
>>> 
>>> However - Immediately outside the C function and back in the Python code 
>>> sys.getrefcount reports the count to be 2 again - meaning it is now really 
>>> 1. So that means that the refcount has been decremented twice in-between 
>>> the return of the C function and the execution of the immediate next python 
>>> statement. I understand one of those decrements - the parameter's ref count 
>>> is incremented on the way in so the same object is decremented on the way 
>>> out (so that calls don't leak references) but I don't understand where the 
>>> second decrement is coming from.
>>> 
>>> Again there is nothing in the Python code that would cause that decrement - 
>>> the decrement behavior is in the Python runtime.
>>> 
>>>>> -- 
>>>>> Anthony Flury
>>>>> email :anthony.fl...@btinternet.com
>>>>> 
>>>>> -- 
>>>>> https://mail.python.org/mailman/listinfo/python-list
>>>>> 
>>> -- 
>>> Anthony Flury
>>> email :anthony.fl...@btinternet.com
> 
> -- 
> Anthony Flury
> email : anthony.fl...@btinternet.com
> 

-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to